c_src: update
[nit.git] / c_src / parser._sep.c
index bc5a062..6e5bfe6 100644 (file)
@@ -6,19 +6,17 @@ val_t parser___State___state(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10;
+  fra.me.line = 9;
   fra.me.meth = LOCATE_parser___State___state;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./parser//parser.nit:9 */
   REGB0 = TAG_Bool(ATTR_parser___State____state(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:10 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_state");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_state", LOCATE_parser, 9);
   }
   REGB0 = ATTR_parser___State____state(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -30,14 +28,14 @@ void parser___State___state__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10;
+  fra.me.line = 9;
   fra.me.meth = LOCATE_parser___State___state__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:10 */
+  /* ./parser//parser.nit:9 */
   ATTR_parser___State____state(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
   return;
@@ -47,14 +45,14 @@ val_t parser___State___nodes(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13;
+  fra.me.line = 12;
   fra.me.meth = LOCATE_parser___State___nodes;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./parser//parser.nit:12 */
   fra.me.REG[0] = ATTR_parser___State____nodes(fra.me.REG[0]);
-  /* ./parser//parser.nit:13 */
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
@@ -63,7 +61,7 @@ void parser___State___nodes__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13;
+  fra.me.line = 12;
   fra.me.meth = LOCATE_parser___State___nodes__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -71,7 +69,7 @@ void parser___State___nodes__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:13 */
+  /* ./parser//parser.nit:12 */
   ATTR_parser___State____nodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -84,7 +82,7 @@ void parser___State___init(val_t p0, val_t p1, val_t p2, int* init_table){
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16;
+  fra.me.line = 15;
   fra.me.meth = LOCATE_parser___State___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -93,9 +91,9 @@ void parser___State___init(val_t p0, val_t p1, val_t p2, int* init_table){
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
-  /* ./parser//parser.nit:18 */
+  /* ./parser//parser.nit:17 */
   ATTR_parser___State____state(fra.me.REG[0]) = REGB0;
-  /* ./parser//parser.nit:19 */
+  /* ./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;
@@ -103,45 +101,39 @@ void parser___State___init(val_t p0, val_t p1, val_t p2, int* init_table){
 }
 void parser___Parser___init(val_t p0, val_t p1, int* init_table){
   int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Parser].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34;
+  fra.me.line = 33;
   fra.me.meth = LOCATE_parser___Parser___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = fra.me.REG[0];
-  /* ./parser//parser.nit:34 */
-  CALL_parser_tables___ParserTable___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser.nit:36 */
+  ATTR_parser___Parser____lexer(fra.me.REG[0]) = fra.me.REG[1];
   /* ./parser//parser.nit:37 */
-  ATTR_parser___Parser____lexer(fra.me.REG[2]) = fra.me.REG[1];
   fra.me.REG[1] = NEW_Array_array___Array___init();
+  ATTR_parser___Parser____stack(fra.me.REG[0]) = fra.me.REG[1];
   /* ./parser//parser.nit:38 */
-  ATTR_parser___Parser____stack(fra.me.REG[2]) = fra.me.REG[1];
   REGB0 = TAG_Int(1);
+  /* ./../lib/standard//kernel.nit:216 */
   REGB0 = TAG_Int(-UNTAG_Int(REGB0));
+  /* ./parser//parser.nit:38 */
+  ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB0;
   /* ./parser//parser.nit:39 */
-  ATTR_parser___Parser____stack_pos(fra.me.REG[2]) = REGB0;
-  /* ./parser//parser.nit:40 */
-  CALL_parser_tables___ParserTable___build_goto_table(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser.nit:41 */
-  CALL_parser_tables___ParserTable___build_action_table(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser.nit:42 */
-  CALL_parser___Parser___build_reduce_table(fra.me.REG[2])(fra.me.REG[2]);
+  CALL_parser___Parser___build_reduce_table(fra.me.REG[0])(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
   return;
 }
 val_t parser___Parser___go_to(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
@@ -153,269 +145,90 @@ val_t parser___Parser___go_to(val_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 = 45;
+  fra.me.line = 42;
   fra.me.meth = LOCATE_parser___Parser___go_to;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
+  /* ./parser//parser.nit:45 */
   REGB1 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
-  REGB2 = TAG_Bool(ATTR_parser_tables___ParserTable____goto_table(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:49 */
-  if (UNTAG_Bool(REGB2)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_goto_table");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 49);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_tables___ParserTable____goto_table(fra.me.REG[0]);
-  REGB2 = TAG_Int(0);
-  REGB2 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB2));
-  /* ./../lib/standard//collection//array.nit:233 */
-  if (UNTAG_Bool(REGB2)) {
-    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB2)) {
-    } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_length");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
-    }
-    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
-    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
-  /* ./../lib/standard//collection//array.nit:233 */
-  } else {
-    REGB3 = TAG_Bool(false);
-    REGB2 = REGB3;
-  }
-  if (UNTAG_Bool(REGB2)) {
-  } else {
-    fprintf(stderr, "Assert %s  failed", "'index'");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_array___Array____items(fra.me.REG[0]);
-  REGB2 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
-  /* ./../lib/standard//collection//array.nit:234 */
-  if (UNTAG_Bool(REGB2)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:234 */
-  goto label1;
-  label1: while(0);
-  REGB0 = TAG_Int(1);
-  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
-  /* ./../lib/standard//collection//array.nit:23 */
-  if (UNTAG_Bool(REGB2)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
-  }
-  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
-  REGB3 = TAG_Int(2);
-  REGB3 = TAG_Int(UNTAG_Int(REGB2)/UNTAG_Int(REGB3));
+  /* ./parser//parser.nit:46 */
   REGB2 = TAG_Int(1);
-  REGB2 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB2));
-  /* ./parser//parser.nit:53 */
+  /* ./parser//parser.nit:47 */
+  REGB3 = TAG_Int(0);
+  REGB3 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
+  REGB4 = TAG_Int(1);
+  /* ./../lib/standard//kernel.nit:217 */
+  REGB4 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB4));
+  /* ./parser//parser.nit:49 */
   while(1) {
-    REGB3 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB2));
-    /* ./parser//parser.nit:53 */
+    /* ./../lib/standard//kernel.nit:211 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB2)<=UNTAG_Int(REGB4));
+    /* ./parser//parser.nit:49 */
     if (UNTAG_Bool(REGB3)) {
-      REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      REGB4 = TAG_Int(2);
-      REGB4 = TAG_Int(UNTAG_Int(REGB3)/UNTAG_Int(REGB4));
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB4));
+      /* ./parser//parser.nit:50 */
+      REGB5 = TAG_Int(2);
+      /* ./../lib/standard//kernel.nit:219 */
+      REGB5 = TAG_Int(UNTAG_Int(REGB3)/UNTAG_Int(REGB5));
+      /* ./parser//parser.nit:51 */
       REGB3 = TAG_Int(2);
-      REGB3 = TAG_Int(UNTAG_Int(REGB4)*UNTAG_Int(REGB3));
-      fra.me.REG[1] = fra.me.REG[0];
-      REGB5 = REGB3;
-      REGB6 = TAG_Int(0);
-      REGB6 = TAG_Bool(UNTAG_Int(REGB5)>=UNTAG_Int(REGB6));
-      /* ./../lib/standard//collection//array.nit:233 */
-      if (UNTAG_Bool(REGB6)) {
-        REGB6 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
-        if (UNTAG_Bool(REGB6)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_length");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-          nit_exit(1);
-        }
-        REGB6 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
-        REGB6 = TAG_Bool(UNTAG_Int(REGB5)<UNTAG_Int(REGB6));
-      /* ./../lib/standard//collection//array.nit:233 */
-      } else {
-        REGB7 = TAG_Bool(false);
-        REGB6 = REGB7;
-      }
-      if (UNTAG_Bool(REGB6)) {
-      } else {
-        fprintf(stderr, "Assert %s  failed", "'index'");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
-      REGB6 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-      /* ./../lib/standard//collection//array.nit:234 */
-      if (UNTAG_Bool(REGB6)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB5)];
-      /* ./../lib/standard//collection//array.nit:234 */
-      goto label2;
-      label2: while(0);
-      REGB5 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(fra.me.REG[1]));
-      /* ./parser//parser.nit:57 */
-      if (UNTAG_Bool(REGB5)) {
-        REGB5 = TAG_Int(1);
-        REGB5 = TAG_Int(UNTAG_Int(REGB4)-UNTAG_Int(REGB5));
-        REGB2 = REGB5;
-      /* ./parser//parser.nit:58 */
+      /* ./../lib/standard//kernel.nit:218 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB5)*UNTAG_Int(REGB3));
+      /* ./parser//parser.nit:51 */
+      REGB6 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      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 */
+      REGB7 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB3));
+      /* ./parser//parser.nit:54 */
+      if (UNTAG_Bool(REGB7)) {
+        /* ./parser//parser.nit:55 */
+        REGB7 = TAG_Int(1);
+        /* ./../lib/standard//kernel.nit:217 */
+        REGB7 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB7));
+        /* ./parser//parser.nit:55 */
+        REGB4 = REGB7;
       } else {
-        fra.me.REG[1] = fra.me.REG[0];
-        REGB5 = REGB3;
-        REGB6 = TAG_Int(0);
-        REGB6 = TAG_Bool(UNTAG_Int(REGB5)>=UNTAG_Int(REGB6));
-        /* ./../lib/standard//collection//array.nit:233 */
-        if (UNTAG_Bool(REGB6)) {
-          REGB6 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
-          if (UNTAG_Bool(REGB6)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_length");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-            nit_exit(1);
-          }
-          REGB6 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
-          REGB6 = TAG_Bool(UNTAG_Int(REGB5)<UNTAG_Int(REGB6));
-        /* ./../lib/standard//collection//array.nit:233 */
-        } else {
-          REGB7 = TAG_Bool(false);
-          REGB6 = REGB7;
-        }
-        if (UNTAG_Bool(REGB6)) {
-        } else {
-          fprintf(stderr, "Assert %s  failed", "'index'");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-          nit_exit(1);
-        }
-        fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
-        REGB6 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-        /* ./../lib/standard//collection//array.nit:234 */
-        if (UNTAG_Bool(REGB6)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-          nit_exit(1);
-        }
-        fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB5)];
-        /* ./../lib/standard//collection//array.nit:234 */
-        goto label3;
-        label3: while(0);
-        REGB5 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(fra.me.REG[1]));
-        /* ./parser//parser.nit:59 */
-        if (UNTAG_Bool(REGB5)) {
-          REGB5 = TAG_Int(1);
-          REGB5 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB5));
-          REGB0 = REGB5;
-        /* ./parser//parser.nit:60 */
+        /* ./../lib/standard//kernel.nit:214 */
+        REGB3 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB3));
+        /* ./parser//parser.nit:56 */
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser.nit:57 */
+          REGB3 = TAG_Int(1);
+          /* ./../lib/standard//kernel.nit:215 */
+          REGB3 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB3));
+          /* ./parser//parser.nit:57 */
+          REGB2 = REGB3;
         } else {
-          REGB5 = TAG_Int(1);
-          REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB5));
-          fra.me.REG[1] = fra.me.REG[0];
-          REGB3 = TAG_Int(0);
-          REGB3 = TAG_Bool(UNTAG_Int(REGB5)>=UNTAG_Int(REGB3));
-          /* ./../lib/standard//collection//array.nit:233 */
-          if (UNTAG_Bool(REGB3)) {
-            REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
-            if (UNTAG_Bool(REGB3)) {
-            } else {
-              fprintf(stderr, "Uninitialized attribute %s", "_length");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-              nit_exit(1);
-            }
-            REGB3 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
-            REGB3 = TAG_Bool(UNTAG_Int(REGB5)<UNTAG_Int(REGB3));
-          /* ./../lib/standard//collection//array.nit:233 */
-          } else {
-            REGB4 = TAG_Bool(false);
-            REGB3 = REGB4;
-          }
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            fprintf(stderr, "Assert %s  failed", "'index'");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-            nit_exit(1);
-          }
-          fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
-          REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-          /* ./../lib/standard//collection//array.nit:234 */
-          if (UNTAG_Bool(REGB3)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-            nit_exit(1);
-          }
-          fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB5)];
-          /* ./../lib/standard//collection//array.nit:234 */
-          goto label4;
-          label4: while(0);
-          REGB5 = fra.me.REG[1];
-          /* ./parser//parser.nit:62 */
-          goto label5;
+          /* ./parser//parser.nit:59 */
+          REGB3 = TAG_Int(1);
+          /* ./../lib/standard//kernel.nit:215 */
+          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);
+          goto label1;
         }
       }
     } else {
-      /* ./parser//parser.nit:53 */
-      goto label6;
-    }
-  }
-  label6: while(0);
-  REGB0 = TAG_Int(1);
-  REGB1 = TAG_Int(0);
-  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-    } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_length");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
+      /* ./parser//parser.nit:49 */
+      goto label2;
     }
-    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
-  } else {
-    REGB2 = TAG_Bool(false);
-    REGB1 = REGB2;
-  }
-  if (UNTAG_Bool(REGB1)) {
-  } else {
-    fprintf(stderr, "Assert %s  failed", "'index'");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-    nit_exit(1);
   }
-  fra.me.REG[0] = ATTR_array___Array____items(fra.me.REG[0]);
-  REGB1 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
-  /* ./../lib/standard//collection//array.nit:234 */
-  if (UNTAG_Bool(REGB1)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:234 */
-  goto label7;
-  label7: while(0);
-  REGB5 = fra.me.REG[0];
-  /* ./parser//parser.nit:66 */
-  goto label5;
-  label5: while(0);
+  label2: while(0);
+  /* ./parser//parser.nit:63 */
+  REGB2 = TAG_Int(2);
+  REGB2 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB2);
+  REGB3 = REGB2;
+  goto label1;
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  return REGB5;
+  return REGB3;
 }
 void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
@@ -426,7 +239,7 @@ void parser___Parser___push(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 = 69;
+  fra.me.line = 66;
   fra.me.meth = LOCATE_parser___Parser___push;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -436,97 +249,87 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
+  /* ./parser//parser.nit:69 */
   REGB1 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:72 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack_pos");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 72);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 69);
   }
   REGB1 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB2 = TAG_Int(1);
+  /* ./../lib/standard//kernel.nit:215 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-  /* ./parser//parser.nit:73 */
+  /* ./parser//parser.nit:70 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB2;
+  /* ./parser//parser.nit:71 */
   REGB1 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:74 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 74);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 71);
   }
   fra.me.REG[2] = ATTR_parser___Parser____stack(fra.me.REG[0]);
-  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   /* ./../lib/standard//collection//array.nit:23 */
+  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
   }
   REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  /* ./../lib/standard//kernel.nit:212 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-  /* ./parser//parser.nit:74 */
+  /* ./parser//parser.nit:71 */
   if (UNTAG_Bool(REGB1)) {
+    /* ./parser//parser.nit:72 */
     REGB1 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-    /* ./parser//parser.nit:75 */
     if (UNTAG_Bool(REGB1)) {
     } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_stack");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 75);
-      nit_exit(1);
+      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 */
     REGB1 = TAG_Int(0);
+    /* ./../lib/standard//kernel.nit:213 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB1));
-    /* ./../lib/standard//collection//array.nit:233 */
+    /* ./../lib/standard//collection//array.nit:245 */
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_length");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
       }
       REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+      /* ./../lib/standard//kernel.nit:212 */
       REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-    /* ./../lib/standard//collection//array.nit:233 */
     } else {
+      /* ./../lib/standard//collection//array.nit:245 */
       REGB3 = TAG_Bool(false);
       REGB1 = REGB3;
     }
     if (UNTAG_Bool(REGB1)) {
     } else {
-      fprintf(stderr, "Assert %s  failed", "'index'");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
+      nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
     }
+    /* ./../lib/standard//collection//array.nit:246 */
     fra.me.REG[2] = ATTR_array___Array____items(fra.me.REG[2]);
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./../lib/standard//collection//array.nit:234 */
     if (UNTAG_Bool(REGB1)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_array, 246);
     }
+    /* ./../lib/standard//collection//array.nit:654 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
-    /* ./../lib/standard//collection//array.nit:234 */
+    /* ./../lib/standard//collection//array.nit:246 */
     goto label1;
     label1: while(0);
-    /* ./parser//parser.nit:76 */
+    /* ./parser//parser.nit:73 */
     CALL_parser___State___state__eq(fra.me.REG[2])(fra.me.REG[2], REGB0);
-    /* ./parser//parser.nit:77 */
+    /* ./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 */
     REGB2 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-    /* ./parser//parser.nit:79 */
     if (UNTAG_Bool(REGB2)) {
     } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_stack");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 79);
-      nit_exit(1);
+      nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 76);
     }
     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]);
@@ -543,72 +346,64 @@ val_t parser___Parser___state(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 83;
+  fra.me.line = 80;
   fra.me.meth = LOCATE_parser___Parser___state;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./parser//parser.nit:83 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:86 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 86);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 83);
   }
   fra.me.REG[1] = ATTR_parser___Parser____stack(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack_pos");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 86);
-    nit_exit(1);
+    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 */
   REGB1 = TAG_Int(0);
+  /* ./../lib/standard//kernel.nit:213 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
+  /* ./../lib/standard//collection//array.nit:245 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_length");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
     }
     REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
+    /* ./../lib/standard//kernel.nit:212 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
   } else {
+    /* ./../lib/standard//collection//array.nit:245 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Assert %s  failed", "'index'");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-    nit_exit(1);
+    nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
   }
+  /* ./../lib/standard//collection//array.nit:246 */
   fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./../lib/standard//collection//array.nit:234 */
   if (UNTAG_Bool(REGB1)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_array, 246);
   }
+  /* ./../lib/standard//collection//array.nit:654 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:234 */
+  /* ./../lib/standard//collection//array.nit:246 */
   goto label1;
   label1: while(0);
+  /* ./parser//parser.nit:83 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser.nit:86 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 86);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser, 83);
   }
   REGB0 = CALL_parser___State___state(fra.me.REG[1])(fra.me.REG[1]);
   goto label2;
@@ -624,88 +419,79 @@ val_t parser___Parser___pop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 89;
+  fra.me.line = 86;
   fra.me.meth = LOCATE_parser___Parser___pop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./parser//parser.nit:89 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:92 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 92);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 89);
   }
   fra.me.REG[1] = ATTR_parser___Parser____stack(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack_pos");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 92);
-    nit_exit(1);
+    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 */
   REGB1 = TAG_Int(0);
+  /* ./../lib/standard//kernel.nit:213 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
+  /* ./../lib/standard//collection//array.nit:245 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_length");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
     }
     REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
+    /* ./../lib/standard//kernel.nit:212 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:233 */
   } else {
+    /* ./../lib/standard//collection//array.nit:245 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Assert %s  failed", "'index'");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-    nit_exit(1);
+    nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
   }
+  /* ./../lib/standard//collection//array.nit:246 */
   fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./../lib/standard//collection//array.nit:234 */
   if (UNTAG_Bool(REGB1)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_array, 246);
   }
+  /* ./../lib/standard//collection//array.nit:654 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:234 */
+  /* ./../lib/standard//collection//array.nit:246 */
   goto label1;
   label1: while(0);
+  /* ./parser//parser.nit:89 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser.nit:92 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 92);
-    nit_exit(1);
+    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 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:93 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_stack_pos");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 93);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 90);
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
+  /* ./../lib/standard//kernel.nit:217 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* ./parser//parser.nit:93 */
+  /* ./parser//parser.nit:90 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB1;
-  /* ./parser//parser.nit:94 */
+  /* ./parser//parser.nit:91 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -722,12 +508,11 @@ val_t parser___Parser___parse(val_t p0){
   val_t REGB6;
   val_t REGB7;
   val_t REGB8;
-  val_t REGB9;
   val_t tmp;
-              static val_t once_value_11; /* Once value */
+            static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 97;
+  fra.me.line = 94;
   fra.me.meth = LOCATE_parser___Parser___parse;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -738,515 +523,271 @@ 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 */
   REGB0 = TAG_Int(0);
-  /* ./parser//parser.nit:100 */
   CALL_parser___Parser___push(fra.me.REG[0])(fra.me.REG[0], REGB0, NIT_NULL);
+  /* ./parser//parser.nit:99 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____lexer(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser.nit:102 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_lexer");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 102);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_lexer", LOCATE_parser, 99);
   }
   fra.me.REG[1] = ATTR_parser___Parser____lexer(fra.me.REG[0]);
-  /* ./parser//parser.nit:103 */
+  /* ./parser//parser.nit:100 */
   while(1) {
-    REGB0 = TAG_Bool(true);
+    /* ./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*/;
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_lexer___Lexer___peek(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AError, ID_AError)) /*cast AError*/;
-      /* ./parser//parser.nit:105 */
-      if (UNTAG_Bool(REGB0)) {
-        fra.me.REG[3] = NEW_Start_parser_prod___Start___init(NIT_NULL, fra.me.REG[2]);
-        /* ./parser//parser.nit:106 */
-        goto label1;
-      }
-      REGB0 = CALL_lexer___Token___parser_index(fra.me.REG[2])(fra.me.REG[2]);
-      REGB1 = TAG_Bool(ATTR_parser_tables___ParserTable____action_table(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:110 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_action_table");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 110);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_tables___ParserTable____action_table(fra.me.REG[0]);
-      REGB1 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
-      REGB2 = TAG_Int(0);
-      REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
-      /* ./../lib/standard//collection//array.nit:233 */
-      if (UNTAG_Bool(REGB2)) {
-        REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser.nit:103 */
+      fra.me.REG[3] = NEW_Start_parser_prod___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 */
+    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 */
+    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 */
+    REGB1 = TAG_Int(1);
+    /* ./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);
+    REGB4 = TAG_Int(1);
+    /* ./../lib/standard//kernel.nit:217 */
+    REGB4 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB4));
+    /* ./parser//parser.nit:113 */
+    while(1) {
+      /* ./../lib/standard//kernel.nit:211 */
+      REGB5 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB4));
+      /* ./parser//parser.nit:113 */
+      if (UNTAG_Bool(REGB5)) {
+        /* ./../lib/standard//kernel.nit:215 */
+        REGB5 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB4));
+        /* ./parser//parser.nit:114 */
+        REGB6 = TAG_Int(2);
+        /* ./../lib/standard//kernel.nit:219 */
+        REGB6 = TAG_Int(UNTAG_Int(REGB5)/UNTAG_Int(REGB6));
+        /* ./parser//parser.nit:115 */
+        REGB5 = TAG_Int(3);
+        /* ./../lib/standard//kernel.nit:218 */
+        REGB5 = TAG_Int(UNTAG_Int(REGB6)*UNTAG_Int(REGB5));
+        /* ./parser//parser.nit:115 */
+        REGB7 = TAG_Int(1);
+        /* ./../lib/standard//kernel.nit:215 */
+        REGB7 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB7));
+        /* ./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 */
+        REGB8 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB5));
+        /* ./parser//parser.nit:118 */
+        if (UNTAG_Bool(REGB8)) {
+          /* ./parser//parser.nit:119 */
+          REGB8 = TAG_Int(1);
+          /* ./../lib/standard//kernel.nit:217 */
+          REGB8 = TAG_Int(UNTAG_Int(REGB6)-UNTAG_Int(REGB8));
+          /* ./parser//parser.nit:119 */
+          REGB4 = REGB8;
         } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_length");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-          nit_exit(1);
+          /* ./../lib/standard//kernel.nit:214 */
+          REGB5 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB5));
+          /* ./parser//parser.nit:120 */
+          if (UNTAG_Bool(REGB5)) {
+            /* ./parser//parser.nit:121 */
+            REGB5 = TAG_Int(1);
+            /* ./../lib/standard//kernel.nit:215 */
+            REGB5 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB5));
+            /* ./parser//parser.nit:121 */
+            REGB1 = REGB5;
+          } else {
+            /* ./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 */
+            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);
+            REGB2 = REGB6;
+            /* ./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 */
+            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);
+            REGB3 = REGB5;
+            /* ./parser//parser.nit:125 */
+            REGB5 = TAG_Int(1);
+            /* ./../lib/standard//kernel.nit:217 */
+            REGB5 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB5));
+            /* ./parser//parser.nit:125 */
+            REGB4 = REGB5;
+          }
         }
-        REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-        REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-      /* ./../lib/standard//collection//array.nit:233 */
-      } else {
-        REGB3 = TAG_Bool(false);
-        REGB2 = REGB3;
-      }
-      if (UNTAG_Bool(REGB2)) {
       } else {
-        fprintf(stderr, "Assert %s  failed", "'index'");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[4]);
-      REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-      /* ./../lib/standard//collection//array.nit:234 */
-      if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-        nit_exit(1);
+        /* ./parser//parser.nit:113 */
+        goto label2;
       }
-      fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
-      /* ./../lib/standard//collection//array.nit:234 */
-      goto label2;
-      label2: while(0);
+    }
+    label2: while(0);
+    /* ./parser//parser.nit:129 */
+    REGB4 = TAG_Int(0);
+    REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB4));
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      /* ./../lib/standard//kernel.nit:207 */
+      REGB4 = TAG_Bool((REGB2)==(REGB4));
+      /* ./parser//parser.nit:129 */
+      REGB1 = REGB4;
+    }
+    if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser.nit:130 */
+      fra.me.REG[4] = CALL_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 */
       REGB1 = TAG_Int(1);
-      fra.me.REG[5] = fra.me.REG[4];
-      REGB2 = TAG_Int(0);
-      REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
-      /* ./../lib/standard//collection//array.nit:233 */
-      if (UNTAG_Bool(REGB2)) {
-        REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_length");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-          nit_exit(1);
-        }
-        REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-        REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-      /* ./../lib/standard//collection//array.nit:233 */
-      } else {
-        REGB3 = TAG_Bool(false);
-        REGB2 = REGB3;
-      }
-      if (UNTAG_Bool(REGB2)) {
+      REGB4 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
+      if (UNTAG_Bool(REGB4)) {
       } else {
-        fprintf(stderr, "Assert %s  failed", "'index'");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-      REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-      /* ./../lib/standard//collection//array.nit:234 */
-      if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-        nit_exit(1);
+        /* ./../lib/standard//kernel.nit:207 */
+        REGB1 = TAG_Bool((REGB2)==(REGB1));
+        /* ./parser//parser.nit:131 */
+        REGB4 = REGB1;
       }
-      fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
-      /* ./../lib/standard//collection//array.nit:234 */
-      goto label3;
-      label3: while(0);
-      REGB1 = fra.me.REG[5];
-      REGB2 = TAG_Int(2);
-      fra.me.REG[5] = fra.me.REG[4];
-      REGB3 = TAG_Int(0);
-      REGB3 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB3));
-      /* ./../lib/standard//collection//array.nit:233 */
-      if (UNTAG_Bool(REGB3)) {
-        REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
+      if (UNTAG_Bool(REGB4)) {
+        /* ./parser//parser.nit:132 */
+        REGB4 = TAG_Bool(ATTR_parser___Parser____reduce_table(fra.me.REG[0])!=NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
         } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_length");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-          nit_exit(1);
+          nit_abort("Uninitialized attribute %s", "_reduce_table", LOCATE_parser, 132);
         }
-        REGB3 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-        REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
-      /* ./../lib/standard//collection//array.nit:233 */
-      } else {
-        REGB4 = TAG_Bool(false);
-        REGB3 = REGB4;
-      }
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        fprintf(stderr, "Assert %s  failed", "'index'");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-      REGB3 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-      /* ./../lib/standard//collection//array.nit:234 */
-      if (UNTAG_Bool(REGB3)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB2)];
-      /* ./../lib/standard//collection//array.nit:234 */
-      goto label4;
-      label4: while(0);
-      REGB2 = fra.me.REG[5];
-      REGB3 = TAG_Int(1);
-      REGB4 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
-      /* ./../lib/standard//collection//array.nit:23 */
-      if (UNTAG_Bool(REGB4)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_length");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-        nit_exit(1);
-      }
-      REGB4 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-      REGB5 = TAG_Int(3);
-      REGB5 = TAG_Int(UNTAG_Int(REGB4)/UNTAG_Int(REGB5));
-      REGB4 = TAG_Int(1);
-      REGB4 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB4));
-      /* ./parser//parser.nit:117 */
-      while(1) {
-        REGB5 = TAG_Bool(UNTAG_Int(REGB3)<=UNTAG_Int(REGB4));
-        /* ./parser//parser.nit:117 */
-        if (UNTAG_Bool(REGB5)) {
-          REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB4));
-          REGB6 = TAG_Int(2);
-          REGB6 = TAG_Int(UNTAG_Int(REGB5)/UNTAG_Int(REGB6));
-          REGB5 = TAG_Int(3);
-          REGB5 = TAG_Int(UNTAG_Int(REGB6)*UNTAG_Int(REGB5));
-          fra.me.REG[5] = fra.me.REG[4];
-          REGB7 = REGB5;
-          REGB8 = TAG_Int(0);
-          REGB8 = TAG_Bool(UNTAG_Int(REGB7)>=UNTAG_Int(REGB8));
-          /* ./../lib/standard//collection//array.nit:233 */
-          if (UNTAG_Bool(REGB8)) {
-            REGB8 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-            if (UNTAG_Bool(REGB8)) {
-            } else {
-              fprintf(stderr, "Uninitialized attribute %s", "_length");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-              nit_exit(1);
-            }
-            REGB8 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-            REGB8 = TAG_Bool(UNTAG_Int(REGB7)<UNTAG_Int(REGB8));
-          /* ./../lib/standard//collection//array.nit:233 */
-          } else {
-            REGB9 = TAG_Bool(false);
-            REGB8 = REGB9;
-          }
-          if (UNTAG_Bool(REGB8)) {
-          } else {
-            fprintf(stderr, "Assert %s  failed", "'index'");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-            nit_exit(1);
-          }
-          fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-          REGB8 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-          /* ./../lib/standard//collection//array.nit:234 */
-          if (UNTAG_Bool(REGB8)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-            nit_exit(1);
-          }
-          fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB7)];
-          /* ./../lib/standard//collection//array.nit:234 */
-          goto label5;
-          label5: while(0);
-          REGB7 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(fra.me.REG[5]));
-          /* ./parser//parser.nit:121 */
-          if (UNTAG_Bool(REGB7)) {
-            REGB7 = TAG_Int(1);
-            REGB7 = TAG_Int(UNTAG_Int(REGB6)-UNTAG_Int(REGB7));
-            REGB4 = REGB7;
-          /* ./parser//parser.nit:122 */
+        fra.me.REG[4] = ATTR_parser___Parser____reduce_table(fra.me.REG[0]);
+        /* ./../lib/standard//collection//array.nit:245 */
+        REGB4 = TAG_Int(0);
+        /* ./../lib/standard//kernel.nit:213 */
+        REGB4 = TAG_Bool(UNTAG_Int(REGB3)>=UNTAG_Int(REGB4));
+        /* ./../lib/standard//collection//array.nit:245 */
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
           } else {
-            fra.me.REG[5] = fra.me.REG[4];
-            REGB7 = REGB5;
-            REGB8 = TAG_Int(0);
-            REGB8 = TAG_Bool(UNTAG_Int(REGB7)>=UNTAG_Int(REGB8));
-            /* ./../lib/standard//collection//array.nit:233 */
-            if (UNTAG_Bool(REGB8)) {
-              REGB8 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-              if (UNTAG_Bool(REGB8)) {
-              } else {
-               fprintf(stderr, "Uninitialized attribute %s", "_length");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-               nit_exit(1);
-              }
-              REGB8 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-              REGB8 = TAG_Bool(UNTAG_Int(REGB7)<UNTAG_Int(REGB8));
-            /* ./../lib/standard//collection//array.nit:233 */
-            } else {
-              REGB9 = TAG_Bool(false);
-              REGB8 = REGB9;
-            }
-            if (UNTAG_Bool(REGB8)) {
-            } else {
-              fprintf(stderr, "Assert %s  failed", "'index'");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-              nit_exit(1);
-            }
-            fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-            REGB8 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-            /* ./../lib/standard//collection//array.nit:234 */
-            if (UNTAG_Bool(REGB8)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-              nit_exit(1);
-            }
-            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB7)];
-            /* ./../lib/standard//collection//array.nit:234 */
-            goto label6;
-            label6: while(0);
-            REGB7 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(fra.me.REG[5]));
-            /* ./parser//parser.nit:123 */
-            if (UNTAG_Bool(REGB7)) {
-              REGB7 = TAG_Int(1);
-              REGB7 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB7));
-              REGB3 = REGB7;
-            /* ./parser//parser.nit:124 */
-            } else {
-              REGB7 = TAG_Int(1);
-              REGB7 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB7));
-              fra.me.REG[5] = fra.me.REG[4];
-              REGB6 = TAG_Int(0);
-              REGB6 = TAG_Bool(UNTAG_Int(REGB7)>=UNTAG_Int(REGB6));
-              /* ./../lib/standard//collection//array.nit:233 */
-              if (UNTAG_Bool(REGB6)) {
-               REGB6 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-               if (UNTAG_Bool(REGB6)) {
-               } else {
-               fprintf(stderr, "Uninitialized attribute %s", "_length");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-               nit_exit(1);
-               }
-               REGB6 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-               REGB6 = TAG_Bool(UNTAG_Int(REGB7)<UNTAG_Int(REGB6));
-              /* ./../lib/standard//collection//array.nit:233 */
-              } else {
-               REGB8 = TAG_Bool(false);
-               REGB6 = REGB8;
-              }
-              if (UNTAG_Bool(REGB6)) {
-              } else {
-               fprintf(stderr, "Assert %s  failed", "'index'");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-               nit_exit(1);
-              }
-              fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-              REGB6 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-              /* ./../lib/standard//collection//array.nit:234 */
-              if (UNTAG_Bool(REGB6)) {
-               fprintf(stderr, "Reciever is null");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-               nit_exit(1);
-              }
-              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB7)];
-              /* ./../lib/standard//collection//array.nit:234 */
-              goto label7;
-              label7: while(0);
-              REGB1 = fra.me.REG[5];
-              REGB7 = TAG_Int(2);
-              REGB7 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB7));
-              fra.me.REG[5] = fra.me.REG[4];
-              REGB5 = TAG_Int(0);
-              REGB5 = TAG_Bool(UNTAG_Int(REGB7)>=UNTAG_Int(REGB5));
-              /* ./../lib/standard//collection//array.nit:233 */
-              if (UNTAG_Bool(REGB5)) {
-               REGB5 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
-               if (UNTAG_Bool(REGB5)) {
-               } else {
-               fprintf(stderr, "Uninitialized attribute %s", "_length");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-               nit_exit(1);
-               }
-               REGB5 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
-               REGB5 = TAG_Bool(UNTAG_Int(REGB7)<UNTAG_Int(REGB5));
-              /* ./../lib/standard//collection//array.nit:233 */
-              } else {
-               REGB6 = TAG_Bool(false);
-               REGB5 = REGB6;
-              }
-              if (UNTAG_Bool(REGB5)) {
-              } else {
-               fprintf(stderr, "Assert %s  failed", "'index'");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-               nit_exit(1);
-              }
-              fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
-              REGB5 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-              /* ./../lib/standard//collection//array.nit:234 */
-              if (UNTAG_Bool(REGB5)) {
-               fprintf(stderr, "Reciever is null");
-               fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-               nit_exit(1);
-              }
-              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB7)];
-              /* ./../lib/standard//collection//array.nit:234 */
-              goto label8;
-              label8: while(0);
-              REGB2 = fra.me.REG[5];
-              REGB7 = TAG_Int(1);
-              REGB7 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB7));
-              REGB4 = REGB7;
-            /* ./parser//parser.nit:128 */
-            }
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
           }
+          REGB4 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
+          /* ./../lib/standard//kernel.nit:212 */
+          REGB4 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB4));
         } else {
-          /* ./parser//parser.nit:117 */
-          goto label9;
+          /* ./../lib/standard//collection//array.nit:245 */
+          REGB1 = TAG_Bool(false);
+          REGB4 = REGB1;
         }
-      }
-      label9: while(0);
-      REGB4 = TAG_Int(0);
-      REGB3 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB4));
-      /* ./parser//parser.nit:132 */
-      if (UNTAG_Bool(REGB3)) {
+        if (UNTAG_Bool(REGB4)) {
+        } else {
+          nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
+        }
+        /* ./../lib/standard//collection//array.nit:246 */
+        fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[4]);
+        REGB4 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          nit_abort("Reciever is null", NULL, LOCATE_array, 246);
+        }
+        /* ./../lib/standard//collection//array.nit:654 */
+        fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
+        /* ./../lib/standard//collection//array.nit:246 */
+        goto label3;
+        label3: while(0);
+        /* ./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 {
-        REGB4 = TAG_Bool((REGB1)==(REGB4));
-        REGB3 = REGB4;
-      /* ./parser//parser.nit:132 */
-      }
-      if (UNTAG_Bool(REGB3)) {
-        fra.me.REG[4] = CALL_lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
         /* ./parser//parser.nit:133 */
-        CALL_parser___Parser___push(fra.me.REG[0])(fra.me.REG[0], REGB2, fra.me.REG[4]);
-      } else {
-        REGB3 = TAG_Int(1);
-        REGB4 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB3));
-        /* ./parser//parser.nit:134 */
+        REGB3 = TAG_Int(2);
+        REGB4 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
         if (UNTAG_Bool(REGB4)) {
         } else {
-          REGB3 = TAG_Bool((REGB1)==(REGB3));
+          /* ./../lib/standard//kernel.nit:207 */
+          REGB3 = TAG_Bool((REGB2)==(REGB3));
+          /* ./parser//parser.nit:133 */
           REGB4 = REGB3;
-        /* ./parser//parser.nit:134 */
         }
         if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(ATTR_parser___Parser____reduce_table(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser.nit:134 */
+          fra.me.REG[4] = CALL_lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
           /* ./parser//parser.nit:135 */
+          REGB4 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_EOF, ID_EOF)) /*cast EOF*/;
           if (UNTAG_Bool(REGB4)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_reduce_table");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 135);
-            nit_exit(1);
-          }
-          fra.me.REG[4] = ATTR_parser___Parser____reduce_table(fra.me.REG[0]);
-          REGB4 = TAG_Int(0);
-          REGB4 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB4));
-          /* ./../lib/standard//collection//array.nit:233 */
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
-            if (UNTAG_Bool(REGB4)) {
-            } else {
-              fprintf(stderr, "Uninitialized attribute %s", "_length");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-              nit_exit(1);
-            }
-            REGB4 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-            REGB4 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB4));
-          /* ./../lib/standard//collection//array.nit:233 */
-          } else {
-            REGB3 = TAG_Bool(false);
-            REGB4 = REGB3;
+            nit_abort("Assert failed", NULL, LOCATE_parser, 135);
           }
+          /* ./parser//parser.nit:136 */
+          fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[0])(fra.me.REG[0]);
+          /* ./parser//parser.nit:137 */
+          REGB4 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_AModule, ID_AModule)) /*cast AModule*/;
           if (UNTAG_Bool(REGB4)) {
           } else {
-            fprintf(stderr, "Assert %s  failed", "'index'");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-            nit_exit(1);
-          }
-          fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[4]);
-          REGB4 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-          /* ./../lib/standard//collection//array.nit:234 */
-          if (UNTAG_Bool(REGB4)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser, 137);
           }
-          fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB2)];
-          /* ./../lib/standard//collection//array.nit:234 */
-          goto label10;
-          label10: while(0);
-          REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-          /* ./parser//parser.nit:135 */
-          if (UNTAG_Bool(REGB2)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 135);
-            nit_exit(1);
-          }
-          CALL_parser___ReduceAction___action(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+          /* ./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 */
+          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 */
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label1;
         } else {
-          REGB2 = TAG_Int(2);
-          REGB4 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB2));
-          /* ./parser//parser.nit:136 */
-          if (UNTAG_Bool(REGB4)) {
+          /* ./parser//parser.nit:141 */
+          REGB4 = TAG_Int(3);
+          REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB4));
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            REGB2 = TAG_Bool((REGB1)==(REGB2));
-            REGB4 = REGB2;
-          /* ./parser//parser.nit:136 */
+            /* ./../lib/standard//kernel.nit:207 */
+            REGB4 = TAG_Bool((REGB2)==(REGB4));
+            /* ./parser//parser.nit:141 */
+            REGB3 = REGB4;
           }
-          if (UNTAG_Bool(REGB4)) {
-            fra.me.REG[4] = CALL_lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
-            REGB4 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_EOF, ID_EOF)) /*cast EOF*/;
-            /* ./parser//parser.nit:138 */
-            if (UNTAG_Bool(REGB4)) {
-            } else {
-              fprintf(stderr, "Assert failed");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 138);
-              nit_exit(1);
-            }
-            fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[0])(fra.me.REG[0]);
-            REGB4 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_AModule, ID_AModule)) /*cast AModule*/;
-            /* ./parser//parser.nit:140 */
-            if (UNTAG_Bool(REGB4)) {
-            } else {
-              fprintf(stderr, "Assert failed");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 140);
-              nit_exit(1);
-            }
-            fra.me.REG[4] = NEW_Start_parser_prod___Start___init(fra.me.REG[5], fra.me.REG[4]);
-            fra.me.REG[5] = NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init();
+          if (UNTAG_Bool(REGB3)) {
             /* ./parser//parser.nit:142 */
-            CALL_parser_prod___Visitor___enter_visit(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-            fra.me.REG[3] = fra.me.REG[4];
+            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];
+              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 */
-            goto label1;
-          } else {
-            REGB4 = TAG_Int(3);
-            REGB2 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB4));
+            fra.me.REG[2] = NEW_Start_parser_prod___Start___init(NIT_NULL, fra.me.REG[2]);
             /* ./parser//parser.nit:144 */
-            if (UNTAG_Bool(REGB2)) {
-            } else {
-              REGB4 = TAG_Bool((REGB1)==(REGB4));
-              REGB2 = REGB4;
-            /* ./parser//parser.nit:144 */
-            }
-            if (UNTAG_Bool(REGB2)) {
-              /* ./parser//parser.nit:145 */
-              if (!once_value_11) {
-               fra.me.REG[4] = BOX_NativeString("Syntax error: unexpected token.");
-               REGB2 = TAG_Int(31);
-               fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
-               once_value_11 = fra.me.REG[4];
-               register_static_object(&once_value_11);
-              } else fra.me.REG[4] = once_value_11;
-              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]);
-              fra.me.REG[2] = NEW_Start_parser_prod___Start___init(NIT_NULL, fra.me.REG[2]);
-              fra.me.REG[3] = fra.me.REG[2];
-              /* ./parser//parser.nit:147 */
-              goto label1;
-            }
+            fra.me.REG[3] = fra.me.REG[2];
+            goto label1;
           }
         }
       }
-    } else {
-      /* ./parser//parser.nit:103 */
-      goto label12;
+    }
+    /* ./parser//parser.nit:146 */
+    REGB3 = TAG_Bool(false);
+    if (UNTAG_Bool(REGB3)) {
+      goto label5;
     }
   }
-  label12: while(0);
-  /* ./parser//parser.nit:150 */
-  fprintf(stderr, "Aborted");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 150);
-  nit_exit(1);
+  label5: while(0);
+  /* ./parser//parser.nit:148 */
+  nit_abort("Aborted", NULL, LOCATE_parser, 148);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[3];
@@ -1257,7 +798,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 154;
+  fra.me.line = 152;
   fra.me.meth = LOCATE_parser___Parser___build_reduce_table;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1265,84250 +806,3491 @@ void parser___Parser___build_reduce_table(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Int(1193);
+  /* ./parser//parser.nit:154 */
+  REGB0 = TAG_Int(692);
   fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
-  fra.me.REG[2] = NEW_ReduceAction0_parser___ReduceAction0___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1_parser___ReduceAction1___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction2_parser___ReduceAction2___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction3_parser___ReduceAction3___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction4_parser___ReduceAction4___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction5_parser___ReduceAction5___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction6_parser___ReduceAction6___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction7_parser___ReduceAction7___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction8_parser___ReduceAction8___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction9_parser___ReduceAction9___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction10_parser___ReduceAction10___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction11_parser___ReduceAction11___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction12_parser___ReduceAction12___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction13_parser___ReduceAction13___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction14_parser___ReduceAction14___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction15_parser___ReduceAction15___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction16_parser___ReduceAction16___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction17_parser___ReduceAction17___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction18_parser___ReduceAction18___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction19_parser___ReduceAction19___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction20_parser___ReduceAction20___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction21_parser___ReduceAction21___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction22_parser___ReduceAction22___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction23_parser___ReduceAction23___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction24_parser___ReduceAction24___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction25_parser___ReduceAction25___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction26_parser___ReduceAction26___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction27_parser___ReduceAction27___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction28_parser___ReduceAction28___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction29_parser___ReduceAction29___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction30_parser___ReduceAction30___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction31_parser___ReduceAction31___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction32_parser___ReduceAction32___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction33_parser___ReduceAction33___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction34_parser___ReduceAction34___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction35_parser___ReduceAction35___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction37___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction38_parser___ReduceAction38___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction39_parser___ReduceAction39___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction40_parser___ReduceAction40___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction41_parser___ReduceAction41___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction42_parser___ReduceAction42___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction43_parser___ReduceAction43___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction44_parser___ReduceAction44___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction45_parser___ReduceAction45___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction46_parser___ReduceAction46___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction47_parser___ReduceAction47___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction48_parser___ReduceAction48___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction49_parser___ReduceAction49___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction50_parser___ReduceAction50___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction51_parser___ReduceAction51___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction52_parser___ReduceAction52___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction53_parser___ReduceAction53___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction54_parser___ReduceAction54___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction55_parser___ReduceAction55___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction56_parser___ReduceAction56___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction57_parser___ReduceAction57___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction58_parser___ReduceAction58___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction59_parser___ReduceAction59___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction60_parser___ReduceAction60___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction61___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction62_parser___ReduceAction62___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction63_parser___ReduceAction63___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction64_parser___ReduceAction64___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction65_parser___ReduceAction65___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction70___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction73___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction74_parser___ReduceAction74___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction75_parser___ReduceAction75___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction76_parser___ReduceAction76___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction77___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction81___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction82___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction83___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction84___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction85___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction86_parser___ReduceAction86___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction87_parser___ReduceAction87___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction88_parser___ReduceAction88___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction89_parser___ReduceAction89___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction90_parser___ReduceAction90___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction91_parser___ReduceAction91___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction92_parser___ReduceAction92___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction93_parser___ReduceAction93___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction94_parser___ReduceAction94___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction95_parser___ReduceAction95___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction96_parser___ReduceAction96___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction97_parser___ReduceAction97___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction98_parser___ReduceAction98___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction99_parser___ReduceAction99___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction100_parser___ReduceAction100___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction101_parser___ReduceAction101___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction102_parser___ReduceAction102___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction103_parser___ReduceAction103___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction104_parser___ReduceAction104___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction105_parser___ReduceAction105___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction106_parser___ReduceAction106___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction107_parser___ReduceAction107___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction108_parser___ReduceAction108___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction109_parser___ReduceAction109___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction110_parser___ReduceAction110___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction111_parser___ReduceAction111___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction112_parser___ReduceAction112___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction113_parser___ReduceAction113___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction114_parser___ReduceAction114___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction115_parser___ReduceAction115___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction116_parser___ReduceAction116___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction117_parser___ReduceAction117___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction118_parser___ReduceAction118___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction119_parser___ReduceAction119___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction120_parser___ReduceAction120___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction121_parser___ReduceAction121___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction122_parser___ReduceAction122___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction123_parser___ReduceAction123___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction124_parser___ReduceAction124___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction125_parser___ReduceAction125___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction126_parser___ReduceAction126___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction127_parser___ReduceAction127___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction128_parser___ReduceAction128___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction129_parser___ReduceAction129___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction130_parser___ReduceAction130___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction131_parser___ReduceAction131___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction132_parser___ReduceAction132___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction133_parser___ReduceAction133___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction134_parser___ReduceAction134___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction135_parser___ReduceAction135___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction136_parser___ReduceAction136___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction137_parser___ReduceAction137___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction138_parser___ReduceAction138___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction139___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction140___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction141___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction142___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction143___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction144___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction145___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction146___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction147___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction148___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction149___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction150___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction151___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction152___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction153___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction154___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction155___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction156___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction157___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction158___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction159___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction160___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction161___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction162___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction163___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction164___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction165_parser___ReduceAction165___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction166_parser___ReduceAction166___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction172___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction173___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction174___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction175___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction176___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction177___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction178___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction179___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction180___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction182___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction183___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction184___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction187___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction188___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction189___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction190___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction191___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction192_parser___ReduceAction192___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction193___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction196___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction197___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction199___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction201___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction206___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction207___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction208___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction209___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction211___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction212___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction213___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction217___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction223___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction224_parser___ReduceAction224___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction225_parser___ReduceAction225___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction226___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction227___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction228_parser___ReduceAction228___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction229___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction238___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction241___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction242___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction243___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction244___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction245___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction260___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction264___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction265___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction266___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction268___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction277___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction278___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction288___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction289___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction290___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction291___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction292___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction293___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction294_parser___ReduceAction294___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction296___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction300___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init();
+  /* ./parser//parser.nit:155 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_ReduceAction0_parser___ReduceAction0___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction302___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction330___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction333___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction349___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction350___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction356___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction365___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction370___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction372___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction373___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction374___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction375___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction378___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction380___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction383___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction384___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction385___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction386___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction387___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction388___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction391___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction392___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction393___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction394___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction395___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction396___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction398___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction399___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction400___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction401___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction402___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction403___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction404___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction405___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction406___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction407___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction408___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction409___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction410_parser___ReduceAction410___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction411_parser___ReduceAction411___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction412___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction413_parser___ReduceAction413___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction414_parser___ReduceAction414___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction415_parser___ReduceAction415___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction416___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction417___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction418___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction419___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction420_parser___ReduceAction420___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction421_parser___ReduceAction421___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction422_parser___ReduceAction422___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction423___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction424_parser___ReduceAction424___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction425_parser___ReduceAction425___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction426_parser___ReduceAction426___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction427_parser___ReduceAction427___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction428_parser___ReduceAction428___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction429___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction430___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction431___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction432___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction433___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction434___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction435___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction436___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction437___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction438___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction439___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction440_parser___ReduceAction440___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction441_parser___ReduceAction441___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction442_parser___ReduceAction442___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction443_parser___ReduceAction443___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction444_parser___ReduceAction444___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction445_parser___ReduceAction445___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction446___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction447___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction448___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction449___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction450___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction451___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction452___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction453___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction454___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction455_parser___ReduceAction455___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction456___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction457___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction458_parser___ReduceAction458___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction459___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction460___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction461_parser___ReduceAction461___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction462___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction463___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction464___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction465_parser___ReduceAction465___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction466___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction467_parser___ReduceAction467___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction468_parser___ReduceAction468___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction469_parser___ReduceAction469___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction470_parser___ReduceAction470___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction471_parser___ReduceAction471___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction472_parser___ReduceAction472___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction473_parser___ReduceAction473___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction474_parser___ReduceAction474___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction475_parser___ReduceAction475___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction476_parser___ReduceAction476___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction477_parser___ReduceAction477___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction478_parser___ReduceAction478___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction479_parser___ReduceAction479___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction480_parser___ReduceAction480___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction481___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction482_parser___ReduceAction482___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction483_parser___ReduceAction483___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction484_parser___ReduceAction484___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction485___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction486___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction487___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction488___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction489___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction490___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction491___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction492___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction493_parser___ReduceAction493___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction494_parser___ReduceAction494___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction495_parser___ReduceAction495___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction496___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction497_parser___ReduceAction497___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction498_parser___ReduceAction498___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction499_parser___ReduceAction499___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction500_parser___ReduceAction500___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction501_parser___ReduceAction501___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction502_parser___ReduceAction502___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction503_parser___ReduceAction503___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction504_parser___ReduceAction504___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction505_parser___ReduceAction505___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction506_parser___ReduceAction506___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction507_parser___ReduceAction507___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction508_parser___ReduceAction508___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction509_parser___ReduceAction509___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction510_parser___ReduceAction510___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction511_parser___ReduceAction511___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction512_parser___ReduceAction512___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction513_parser___ReduceAction513___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction514_parser___ReduceAction514___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction515_parser___ReduceAction515___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction516_parser___ReduceAction516___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction517_parser___ReduceAction517___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction518_parser___ReduceAction518___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction519_parser___ReduceAction519___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction520_parser___ReduceAction520___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction521_parser___ReduceAction521___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction522_parser___ReduceAction522___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction523___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction524_parser___ReduceAction524___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction525___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction526___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction527___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction528_parser___ReduceAction528___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction529___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction530_parser___ReduceAction530___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction531___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction532_parser___ReduceAction532___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction533___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction534___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction535___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction536___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction537___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction538___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction539___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction540___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction541___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction542_parser___ReduceAction542___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction543_parser___ReduceAction543___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction544_parser___ReduceAction544___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction545_parser___ReduceAction545___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction546_parser___ReduceAction546___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction547_parser___ReduceAction547___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction548_parser___ReduceAction548___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction549_parser___ReduceAction549___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction550_parser___ReduceAction550___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction551_parser___ReduceAction551___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction552_parser___ReduceAction552___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction553_parser___ReduceAction553___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction554_parser___ReduceAction554___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction555_parser___ReduceAction555___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction556_parser___ReduceAction556___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction557_parser___ReduceAction557___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction558_parser___ReduceAction558___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction559_parser___ReduceAction559___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction560_parser___ReduceAction560___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction561_parser___ReduceAction561___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction562_parser___ReduceAction562___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction563_parser___ReduceAction563___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction564_parser___ReduceAction564___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction565_parser___ReduceAction565___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction566_parser___ReduceAction566___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction567_parser___ReduceAction567___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction568_parser___ReduceAction568___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction569_parser___ReduceAction569___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction570_parser___ReduceAction570___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction571_parser___ReduceAction571___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction572_parser___ReduceAction572___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction573_parser___ReduceAction573___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction574_parser___ReduceAction574___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction575_parser___ReduceAction575___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction576_parser___ReduceAction576___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction577_parser___ReduceAction577___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction578_parser___ReduceAction578___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction579_parser___ReduceAction579___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction580_parser___ReduceAction580___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction581_parser___ReduceAction581___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction582_parser___ReduceAction582___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction583_parser___ReduceAction583___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction584_parser___ReduceAction584___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction585_parser___ReduceAction585___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction586_parser___ReduceAction586___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction587_parser___ReduceAction587___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction588_parser___ReduceAction588___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction589_parser___ReduceAction589___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction590_parser___ReduceAction590___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction591_parser___ReduceAction591___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction592_parser___ReduceAction592___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction593_parser___ReduceAction593___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction594_parser___ReduceAction594___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction595_parser___ReduceAction595___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction596_parser___ReduceAction596___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction597_parser___ReduceAction597___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction598_parser___ReduceAction598___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction599_parser___ReduceAction599___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction600_parser___ReduceAction600___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction601_parser___ReduceAction601___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction602_parser___ReduceAction602___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction603_parser___ReduceAction603___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction604_parser___ReduceAction604___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction605_parser___ReduceAction605___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction606_parser___ReduceAction606___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction607_parser___ReduceAction607___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction608_parser___ReduceAction608___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction609_parser___ReduceAction609___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction610_parser___ReduceAction610___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction611_parser___ReduceAction611___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction612_parser___ReduceAction612___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction613_parser___ReduceAction613___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction614_parser___ReduceAction614___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction615_parser___ReduceAction615___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction616_parser___ReduceAction616___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction617_parser___ReduceAction617___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction618_parser___ReduceAction618___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction619_parser___ReduceAction619___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction620_parser___ReduceAction620___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction621_parser___ReduceAction621___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction622_parser___ReduceAction622___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction623_parser___ReduceAction623___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction624_parser___ReduceAction624___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction625_parser___ReduceAction625___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction626_parser___ReduceAction626___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction627_parser___ReduceAction627___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction628_parser___ReduceAction628___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction629_parser___ReduceAction629___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction630_parser___ReduceAction630___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction631_parser___ReduceAction631___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction632_parser___ReduceAction632___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction633_parser___ReduceAction633___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction634_parser___ReduceAction634___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction635_parser___ReduceAction635___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction636_parser___ReduceAction636___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction637_parser___ReduceAction637___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction638_parser___ReduceAction638___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction639_parser___ReduceAction639___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction640_parser___ReduceAction640___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction641_parser___ReduceAction641___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction642_parser___ReduceAction642___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction643_parser___ReduceAction643___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction644_parser___ReduceAction644___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction645_parser___ReduceAction645___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction646_parser___ReduceAction646___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction647_parser___ReduceAction647___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction648_parser___ReduceAction648___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction649_parser___ReduceAction649___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction650_parser___ReduceAction650___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction651_parser___ReduceAction651___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction652_parser___ReduceAction652___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction653_parser___ReduceAction653___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction654_parser___ReduceAction654___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction655_parser___ReduceAction655___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction656_parser___ReduceAction656___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction657_parser___ReduceAction657___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction658_parser___ReduceAction658___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction659_parser___ReduceAction659___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction660_parser___ReduceAction660___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction661_parser___ReduceAction661___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction662_parser___ReduceAction662___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction663_parser___ReduceAction663___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction664_parser___ReduceAction664___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction665_parser___ReduceAction665___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction666_parser___ReduceAction666___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction667_parser___ReduceAction667___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction668_parser___ReduceAction668___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction669_parser___ReduceAction669___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction670_parser___ReduceAction670___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction671_parser___ReduceAction671___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction672_parser___ReduceAction672___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction673_parser___ReduceAction673___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction674_parser___ReduceAction674___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction675_parser___ReduceAction675___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction676_parser___ReduceAction676___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction677_parser___ReduceAction677___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction678_parser___ReduceAction678___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction679_parser___ReduceAction679___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction680_parser___ReduceAction680___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction681_parser___ReduceAction681___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction682___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction683_parser___ReduceAction683___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction684_parser___ReduceAction684___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction685_parser___ReduceAction685___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction686_parser___ReduceAction686___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction687___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction689___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction690_parser___ReduceAction690___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction691_parser___ReduceAction691___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction692_parser___ReduceAction692___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction693_parser___ReduceAction693___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction694_parser___ReduceAction694___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction695_parser___ReduceAction695___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction696_parser___ReduceAction696___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction697_parser___ReduceAction697___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction698_parser___ReduceAction698___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction699_parser___ReduceAction699___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction700_parser___ReduceAction700___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction701_parser___ReduceAction701___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction702_parser___ReduceAction702___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction703_parser___ReduceAction703___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction704___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction705_parser___ReduceAction705___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction706_parser___ReduceAction706___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction707_parser___ReduceAction707___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction708_parser___ReduceAction708___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction709_parser___ReduceAction709___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction710_parser___ReduceAction710___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction711_parser___ReduceAction711___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction712_parser___ReduceAction712___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction713_parser___ReduceAction713___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction714_parser___ReduceAction714___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction715_parser___ReduceAction715___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction716_parser___ReduceAction716___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction717_parser___ReduceAction717___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction718_parser___ReduceAction718___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction719_parser___ReduceAction719___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction720_parser___ReduceAction720___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction721_parser___ReduceAction721___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction722_parser___ReduceAction722___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction723_parser___ReduceAction723___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction724_parser___ReduceAction724___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction725_parser___ReduceAction725___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction726_parser___ReduceAction726___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction727_parser___ReduceAction727___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction728_parser___ReduceAction728___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction729_parser___ReduceAction729___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction730_parser___ReduceAction730___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction731_parser___ReduceAction731___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction732_parser___ReduceAction732___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction733_parser___ReduceAction733___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction734_parser___ReduceAction734___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction735_parser___ReduceAction735___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction736_parser___ReduceAction736___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction737_parser___ReduceAction737___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction738_parser___ReduceAction738___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction739_parser___ReduceAction739___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction740_parser___ReduceAction740___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction741_parser___ReduceAction741___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction742_parser___ReduceAction742___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction743_parser___ReduceAction743___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction744_parser___ReduceAction744___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction745_parser___ReduceAction745___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction746_parser___ReduceAction746___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction747_parser___ReduceAction747___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction748_parser___ReduceAction748___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction749_parser___ReduceAction749___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction750_parser___ReduceAction750___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction751_parser___ReduceAction751___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction752_parser___ReduceAction752___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction753_parser___ReduceAction753___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction754_parser___ReduceAction754___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction755_parser___ReduceAction755___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction756_parser___ReduceAction756___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction757_parser___ReduceAction757___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction758_parser___ReduceAction758___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction759_parser___ReduceAction759___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction760_parser___ReduceAction760___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction761_parser___ReduceAction761___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction762_parser___ReduceAction762___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction763_parser___ReduceAction763___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction764_parser___ReduceAction764___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction765_parser___ReduceAction765___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction766_parser___ReduceAction766___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction767_parser___ReduceAction767___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction768_parser___ReduceAction768___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction769_parser___ReduceAction769___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction770_parser___ReduceAction770___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction771_parser___ReduceAction771___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction772_parser___ReduceAction772___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction773_parser___ReduceAction773___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction774_parser___ReduceAction774___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction775_parser___ReduceAction775___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction776_parser___ReduceAction776___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction777_parser___ReduceAction777___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction778_parser___ReduceAction778___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction779_parser___ReduceAction779___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction780_parser___ReduceAction780___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction781_parser___ReduceAction781___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction782_parser___ReduceAction782___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction783_parser___ReduceAction783___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction784_parser___ReduceAction784___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction785_parser___ReduceAction785___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction786_parser___ReduceAction786___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction787_parser___ReduceAction787___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction788_parser___ReduceAction788___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction789_parser___ReduceAction789___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction790_parser___ReduceAction790___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction791_parser___ReduceAction791___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction792_parser___ReduceAction792___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction793_parser___ReduceAction793___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction794_parser___ReduceAction794___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction795_parser___ReduceAction795___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction796_parser___ReduceAction796___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction797_parser___ReduceAction797___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction798_parser___ReduceAction798___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction799_parser___ReduceAction799___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction800_parser___ReduceAction800___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction801_parser___ReduceAction801___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction802_parser___ReduceAction802___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction803_parser___ReduceAction803___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction804_parser___ReduceAction804___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction805_parser___ReduceAction805___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction806_parser___ReduceAction806___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction807_parser___ReduceAction807___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction808_parser___ReduceAction808___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction809_parser___ReduceAction809___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction810_parser___ReduceAction810___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction811_parser___ReduceAction811___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction812_parser___ReduceAction812___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction813_parser___ReduceAction813___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction814_parser___ReduceAction814___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction815_parser___ReduceAction815___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction816_parser___ReduceAction816___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction817_parser___ReduceAction817___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction818_parser___ReduceAction818___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction819_parser___ReduceAction819___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction820_parser___ReduceAction820___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction821_parser___ReduceAction821___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction822_parser___ReduceAction822___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction823_parser___ReduceAction823___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction824_parser___ReduceAction824___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction825_parser___ReduceAction825___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction826_parser___ReduceAction826___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction827_parser___ReduceAction827___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction828_parser___ReduceAction828___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction829_parser___ReduceAction829___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction830_parser___ReduceAction830___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction831_parser___ReduceAction831___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction832_parser___ReduceAction832___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction833_parser___ReduceAction833___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction834_parser___ReduceAction834___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction835_parser___ReduceAction835___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction836_parser___ReduceAction836___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction837_parser___ReduceAction837___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction838_parser___ReduceAction838___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction839_parser___ReduceAction839___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction840_parser___ReduceAction840___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction841_parser___ReduceAction841___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction842_parser___ReduceAction842___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction843_parser___ReduceAction843___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction844_parser___ReduceAction844___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction845_parser___ReduceAction845___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction846_parser___ReduceAction846___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction847_parser___ReduceAction847___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction848_parser___ReduceAction848___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction849_parser___ReduceAction849___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction850_parser___ReduceAction850___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction851_parser___ReduceAction851___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction852_parser___ReduceAction852___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction853_parser___ReduceAction853___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction854_parser___ReduceAction854___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction855_parser___ReduceAction855___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction856_parser___ReduceAction856___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction857_parser___ReduceAction857___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction858_parser___ReduceAction858___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction859_parser___ReduceAction859___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction860_parser___ReduceAction860___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction861_parser___ReduceAction861___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction862_parser___ReduceAction862___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction863_parser___ReduceAction863___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction864_parser___ReduceAction864___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction865_parser___ReduceAction865___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction866_parser___ReduceAction866___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction867_parser___ReduceAction867___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction868_parser___ReduceAction868___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction869_parser___ReduceAction869___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction870_parser___ReduceAction870___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction871_parser___ReduceAction871___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction872_parser___ReduceAction872___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction873_parser___ReduceAction873___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction874_parser___ReduceAction874___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction875_parser___ReduceAction875___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction876_parser___ReduceAction876___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction877_parser___ReduceAction877___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction878_parser___ReduceAction878___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction879_parser___ReduceAction879___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction880_parser___ReduceAction880___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction881_parser___ReduceAction881___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction882_parser___ReduceAction882___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction883_parser___ReduceAction883___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction884_parser___ReduceAction884___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction885_parser___ReduceAction885___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction886_parser___ReduceAction886___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction887_parser___ReduceAction887___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction888_parser___ReduceAction888___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction889_parser___ReduceAction889___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction890_parser___ReduceAction890___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction891_parser___ReduceAction891___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction892_parser___ReduceAction892___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction893_parser___ReduceAction893___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction894_parser___ReduceAction894___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction895_parser___ReduceAction895___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction896_parser___ReduceAction896___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction897_parser___ReduceAction897___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction898_parser___ReduceAction898___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction899_parser___ReduceAction899___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction900_parser___ReduceAction900___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction901_parser___ReduceAction901___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction902_parser___ReduceAction902___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction903_parser___ReduceAction903___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction904_parser___ReduceAction904___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction905_parser___ReduceAction905___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction906_parser___ReduceAction906___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction907_parser___ReduceAction907___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction908_parser___ReduceAction908___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction909_parser___ReduceAction909___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction910_parser___ReduceAction910___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction911_parser___ReduceAction911___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction912_parser___ReduceAction912___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction913_parser___ReduceAction913___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction914_parser___ReduceAction914___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction915_parser___ReduceAction915___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction916_parser___ReduceAction916___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction917_parser___ReduceAction917___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction918_parser___ReduceAction918___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction919_parser___ReduceAction919___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction920_parser___ReduceAction920___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction921_parser___ReduceAction921___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction922_parser___ReduceAction922___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction923_parser___ReduceAction923___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction924_parser___ReduceAction924___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction925_parser___ReduceAction925___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction926_parser___ReduceAction926___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction927_parser___ReduceAction927___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction928_parser___ReduceAction928___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction929_parser___ReduceAction929___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction930_parser___ReduceAction930___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction931_parser___ReduceAction931___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction932_parser___ReduceAction932___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction933_parser___ReduceAction933___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction934_parser___ReduceAction934___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction935_parser___ReduceAction935___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction936_parser___ReduceAction936___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction937_parser___ReduceAction937___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction938_parser___ReduceAction938___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction939_parser___ReduceAction939___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction940_parser___ReduceAction940___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction941_parser___ReduceAction941___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction942_parser___ReduceAction942___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction943_parser___ReduceAction943___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction944_parser___ReduceAction944___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction945_parser___ReduceAction945___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction946_parser___ReduceAction946___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction947_parser___ReduceAction947___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction948_parser___ReduceAction948___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction949_parser___ReduceAction949___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction950_parser___ReduceAction950___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction951_parser___ReduceAction951___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction952_parser___ReduceAction952___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction953_parser___ReduceAction953___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction954_parser___ReduceAction954___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction955_parser___ReduceAction955___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction956_parser___ReduceAction956___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction957_parser___ReduceAction957___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction958_parser___ReduceAction958___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction959_parser___ReduceAction959___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction960_parser___ReduceAction960___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction961_parser___ReduceAction961___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction962_parser___ReduceAction962___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction963_parser___ReduceAction963___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction964_parser___ReduceAction964___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction965_parser___ReduceAction965___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction966_parser___ReduceAction966___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction967_parser___ReduceAction967___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction968_parser___ReduceAction968___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction969_parser___ReduceAction969___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction970_parser___ReduceAction970___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction971_parser___ReduceAction971___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction972_parser___ReduceAction972___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction973_parser___ReduceAction973___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction974_parser___ReduceAction974___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction975_parser___ReduceAction975___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction976_parser___ReduceAction976___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction977_parser___ReduceAction977___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction978_parser___ReduceAction978___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction979_parser___ReduceAction979___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction980_parser___ReduceAction980___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction981_parser___ReduceAction981___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction982_parser___ReduceAction982___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction983_parser___ReduceAction983___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction984_parser___ReduceAction984___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction985_parser___ReduceAction985___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction986_parser___ReduceAction986___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction987_parser___ReduceAction987___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction988_parser___ReduceAction988___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction989_parser___ReduceAction989___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction990_parser___ReduceAction990___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction991_parser___ReduceAction991___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction992_parser___ReduceAction992___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction993_parser___ReduceAction993___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction994_parser___ReduceAction994___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction995_parser___ReduceAction995___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction996_parser___ReduceAction996___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction997_parser___ReduceAction997___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction998_parser___ReduceAction998___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction999_parser___ReduceAction999___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1000_parser___ReduceAction1000___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1001_parser___ReduceAction1001___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1002_parser___ReduceAction1002___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1003_parser___ReduceAction1003___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1004_parser___ReduceAction1004___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1005_parser___ReduceAction1005___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1006_parser___ReduceAction1006___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1007_parser___ReduceAction1007___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1008_parser___ReduceAction1008___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1009_parser___ReduceAction1009___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1010_parser___ReduceAction1010___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1011_parser___ReduceAction1011___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1012_parser___ReduceAction1012___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1013_parser___ReduceAction1013___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1014_parser___ReduceAction1014___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1015_parser___ReduceAction1015___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1016_parser___ReduceAction1016___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1017_parser___ReduceAction1017___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1018_parser___ReduceAction1018___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1019_parser___ReduceAction1019___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1020_parser___ReduceAction1020___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1021_parser___ReduceAction1021___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1022_parser___ReduceAction1022___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1023_parser___ReduceAction1023___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1024_parser___ReduceAction1024___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1025_parser___ReduceAction1025___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1026_parser___ReduceAction1026___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1027_parser___ReduceAction1027___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1028_parser___ReduceAction1028___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1029_parser___ReduceAction1029___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1030_parser___ReduceAction1030___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1031_parser___ReduceAction1031___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1032_parser___ReduceAction1032___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1033_parser___ReduceAction1033___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1034_parser___ReduceAction1034___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1035_parser___ReduceAction1035___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1036_parser___ReduceAction1036___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1037_parser___ReduceAction1037___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1038_parser___ReduceAction1038___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1039_parser___ReduceAction1039___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1040_parser___ReduceAction1040___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1041_parser___ReduceAction1041___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1042_parser___ReduceAction1042___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1043_parser___ReduceAction1043___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1044_parser___ReduceAction1044___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1045_parser___ReduceAction1045___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1046_parser___ReduceAction1046___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1047_parser___ReduceAction1047___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1048_parser___ReduceAction1048___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1049_parser___ReduceAction1049___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1050_parser___ReduceAction1050___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1051_parser___ReduceAction1051___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1052_parser___ReduceAction1052___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1053_parser___ReduceAction1053___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1054_parser___ReduceAction1054___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1055_parser___ReduceAction1055___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1056_parser___ReduceAction1056___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1057_parser___ReduceAction1057___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1058_parser___ReduceAction1058___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1059_parser___ReduceAction1059___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1060_parser___ReduceAction1060___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1061_parser___ReduceAction1061___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1062_parser___ReduceAction1062___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1063_parser___ReduceAction1063___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1064_parser___ReduceAction1064___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1065_parser___ReduceAction1065___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1066_parser___ReduceAction1066___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1067_parser___ReduceAction1067___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1068_parser___ReduceAction1068___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1069_parser___ReduceAction1069___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1070_parser___ReduceAction1070___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1071_parser___ReduceAction1071___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1072_parser___ReduceAction1072___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1073_parser___ReduceAction1073___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1074_parser___ReduceAction1074___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1075_parser___ReduceAction1075___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1076_parser___ReduceAction1076___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1077_parser___ReduceAction1077___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1078_parser___ReduceAction1078___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1079_parser___ReduceAction1079___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1080_parser___ReduceAction1080___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1081_parser___ReduceAction1081___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1082_parser___ReduceAction1082___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1083_parser___ReduceAction1083___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1084_parser___ReduceAction1084___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1085_parser___ReduceAction1085___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1086_parser___ReduceAction1086___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1087_parser___ReduceAction1087___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1088_parser___ReduceAction1088___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1089_parser___ReduceAction1089___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1090_parser___ReduceAction1090___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1091_parser___ReduceAction1091___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1092_parser___ReduceAction1092___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1093_parser___ReduceAction1093___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1094_parser___ReduceAction1094___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1095_parser___ReduceAction1095___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1096_parser___ReduceAction1096___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1097_parser___ReduceAction1097___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1098_parser___ReduceAction1098___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1099_parser___ReduceAction1099___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1100_parser___ReduceAction1100___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1101_parser___ReduceAction1101___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1102_parser___ReduceAction1102___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1103_parser___ReduceAction1103___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1104_parser___ReduceAction1104___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1105_parser___ReduceAction1105___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1106_parser___ReduceAction1106___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1107_parser___ReduceAction1107___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1108_parser___ReduceAction1108___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1109_parser___ReduceAction1109___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1110_parser___ReduceAction1110___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1111_parser___ReduceAction1111___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1112_parser___ReduceAction1112___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1113_parser___ReduceAction1113___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1114_parser___ReduceAction1114___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1115_parser___ReduceAction1115___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1116_parser___ReduceAction1116___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1117_parser___ReduceAction1117___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1118_parser___ReduceAction1118___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1119_parser___ReduceAction1119___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1120_parser___ReduceAction1120___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1121_parser___ReduceAction1121___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1122_parser___ReduceAction1122___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1123_parser___ReduceAction1123___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1124_parser___ReduceAction1124___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1125_parser___ReduceAction1125___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1126_parser___ReduceAction1126___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1127_parser___ReduceAction1127___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1128_parser___ReduceAction1128___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1129_parser___ReduceAction1129___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1130_parser___ReduceAction1130___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1131_parser___ReduceAction1131___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1132_parser___ReduceAction1132___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1133_parser___ReduceAction1133___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1134_parser___ReduceAction1134___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1135_parser___ReduceAction1135___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1136_parser___ReduceAction1136___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1137_parser___ReduceAction1137___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1138_parser___ReduceAction1138___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1139_parser___ReduceAction1139___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1140_parser___ReduceAction1140___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1141_parser___ReduceAction1141___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1142_parser___ReduceAction1142___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1143_parser___ReduceAction1143___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1144_parser___ReduceAction1144___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1145_parser___ReduceAction1145___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1146_parser___ReduceAction1146___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1147_parser___ReduceAction1147___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1148_parser___ReduceAction1148___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1149_parser___ReduceAction1149___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1150_parser___ReduceAction1150___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1151_parser___ReduceAction1151___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1152_parser___ReduceAction1152___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1153_parser___ReduceAction1153___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1154_parser___ReduceAction1154___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1155_parser___ReduceAction1155___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1156_parser___ReduceAction1156___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1157_parser___ReduceAction1157___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1158_parser___ReduceAction1158___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1159_parser___ReduceAction1159___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1160_parser___ReduceAction1160___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1161_parser___ReduceAction1161___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1162_parser___ReduceAction1162___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1163_parser___ReduceAction1163___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1164_parser___ReduceAction1164___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1165_parser___ReduceAction1165___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1166_parser___ReduceAction1166___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1167_parser___ReduceAction1167___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1168_parser___ReduceAction1168___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1169_parser___ReduceAction1169___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1170_parser___ReduceAction1170___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1171_parser___ReduceAction1171___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1172_parser___ReduceAction1172___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1173_parser___ReduceAction1173___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1174_parser___ReduceAction1174___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1175_parser___ReduceAction1175___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1176_parser___ReduceAction1176___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1177_parser___ReduceAction1177___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1178_parser___ReduceAction1178___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1179_parser___ReduceAction1179___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1180_parser___ReduceAction1180___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1181_parser___ReduceAction1181___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1182_parser___ReduceAction1182___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1183_parser___ReduceAction1183___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1184_parser___ReduceAction1184___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1185_parser___ReduceAction1185___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1186_parser___ReduceAction1186___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1187_parser___ReduceAction1187___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1188_parser___ReduceAction1188___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1189_parser___ReduceAction1189___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1190_parser___ReduceAction1190___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1191_parser___ReduceAction1191___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1192_parser___ReduceAction1192___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = NEW_ReduceAction1193_parser___ReduceAction1193___init();
-  /* ./parser//parser.nit:156 */
-  array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[1] = NEW_Array_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;
-}
-void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1381;
-  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[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;
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser.nit:1383 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1384 */
-    goto label1;
-  } else {
-    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Token, ID_Token)) /*cast Token*/;
-    /* ./parser//parser.nit:1385 */
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-      /* ./parser//parser.nit:1386 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1386);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./parser//parser.nit:1387 */
-      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:1390 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_need_first_prods");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1390);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-      while(1) {
-        REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-        if (UNTAG_Bool(REGB0)) {
-          fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-          /* ./parser//parser.nit:1391 */
-          ATTR_parser___Prod____first_location(fra.me.REG[4]) = fra.me.REG[2];
-        } else {
-          /* ./parser//parser.nit:1390 */
-          goto label2;
-        }
-        CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-      }
-      label2: while(0);
-      REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:1393 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_need_first_prods");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1393);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:1396 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_need_after_epsilons");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1396);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-      while(1) {
-        REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-        if (UNTAG_Bool(REGB0)) {
-          fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-          fra.me.REG[5] = fra.me.REG[2];
-          fra.me.REG[6] = ATTR_parser___Prod____last_location(fra.me.REG[4]);
-          fra.me.REG[7] = CALL_location___Location___file(fra.me.REG[5])(fra.me.REG[5]);
-          REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-          /* ./parser//parser.nit:1401 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1401);
-            nit_exit(1);
-          }
-          REGB0 = CALL_location___Location___line_end(fra.me.REG[6])(fra.me.REG[6]);
-          REGB1 = CALL_location___Location___line_start(fra.me.REG[5])(fra.me.REG[5]);
-          REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1401);
-            nit_exit(1);
-          }
-          REGB2 = CALL_location___Location___column_end(fra.me.REG[6])(fra.me.REG[6]);
-          REGB3 = CALL_location___Location___column_start(fra.me.REG[5])(fra.me.REG[5]);
-          fra.me.REG[7] = NEW_Location_location___Location___init(fra.me.REG[7], REGB0, REGB1, REGB2, REGB3);
-          CALL_parser_nodes___Prod___location__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-        } else {
-          /* ./parser//parser.nit:1396 */
-          goto label3;
-        }
-        CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-      }
-      label3: while(0);
-      REGB3 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:1403 */
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_need_after_epsilons");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1403);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[3])(fra.me.REG[3]);
-    } else {
-      REGB3 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Prod, ID_Prod)) /*cast Prod*/;
-      /* ./parser//parser.nit:1405 */
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1405);
-        nit_exit(1);
-      }
-      REGB3 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser.nit:1406 */
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_need_first_prods");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1406);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      array___Array___add(fra.me.REG[3], fra.me.REG[1]);
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:1409 */
-      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
-      REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-      /* ./parser//parser.nit:1410 */
-      if (UNTAG_Bool(REGB3)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1410);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser.nit:1412 */
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB3 = REGB2;
-        } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-          REGB3 = REGB2;
-        }
-      }
-      if (UNTAG_Bool(REGB3)) {
-        ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[3];
-      }
-      /* ./parser//parser.nit:1414 */
-      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[2];
-      fra.me.REG[3] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
-      REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-      /* ./parser//parser.nit:1416 */
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB3 = REGB2;
-        } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-          REGB3 = REGB2;
-        }
-      }
-      REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-      if (UNTAG_Bool(REGB3)) {
-        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser.nit:1418 */
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB3 = REGB2;
-          } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB3 = REGB2;
-          }
-        }
-        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          fprintf(stderr, "Assert failed");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1418);
-          nit_exit(1);
-        }
-        REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        /* ./parser//parser.nit:1420 */
-        if (UNTAG_Bool(REGB3)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
-        REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB3)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        REGB3 = CALL_location___Location___line_start(fra.me.REG[3])(fra.me.REG[3]);
-        REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        REGB2 = CALL_location___Location___line_end(fra.me.REG[2])(fra.me.REG[2]);
-        REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB1)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        REGB1 = CALL_location___Location___column_start(fra.me.REG[3])(fra.me.REG[3]);
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        REGB0 = CALL_location___Location___column_end(fra.me.REG[2])(fra.me.REG[2]);
-        fra.me.REG[7] = NEW_Location_location___Location___init(fra.me.REG[7], REGB3, REGB2, REGB1, REGB0);
-        REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1420);
-          nit_exit(1);
-        }
-        CALL_parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
-        /* ./parser//parser.nit:1422 */
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_need_before_epsilons");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1422);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        fra.me.REG[7] = CALL_abstract_collection___Collection___iterator(fra.me.REG[7])(fra.me.REG[7]);
-        while(1) {
-          REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[7])(fra.me.REG[7]);
-          if (UNTAG_Bool(REGB0)) {
-            fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[7])(fra.me.REG[7]);
-            REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            /* ./parser//parser.nit:1425 */
-            if (UNTAG_Bool(REGB0)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1425);
-              nit_exit(1);
-            }
-            fra.me.REG[5] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
-            REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            if (UNTAG_Bool(REGB0)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1425);
-              nit_exit(1);
-            }
-            REGB0 = CALL_location___Location___line_start(fra.me.REG[3])(fra.me.REG[3]);
-            REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1425);
-              nit_exit(1);
-            }
-            REGB1 = CALL_location___Location___line_start(fra.me.REG[3])(fra.me.REG[3]);
-            REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            if (UNTAG_Bool(REGB2)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1425);
-              nit_exit(1);
-            }
-            REGB2 = CALL_location___Location___column_start(fra.me.REG[3])(fra.me.REG[3]);
-            REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            if (UNTAG_Bool(REGB3)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1425);
-              nit_exit(1);
-            }
-            REGB3 = CALL_location___Location___column_start(fra.me.REG[3])(fra.me.REG[3]);
-            fra.me.REG[5] = NEW_Location_location___Location___init(fra.me.REG[5], REGB0, REGB1, REGB2, REGB3);
-            CALL_parser_nodes___Prod___location__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
-          } else {
-            /* ./parser//parser.nit:1422 */
-            goto label4;
-          }
-          CALL_abstract_collection___Iterator___next(fra.me.REG[7])(fra.me.REG[7]);
-        }
-        label4: while(0);
-        REGB3 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
-        /* ./parser//parser.nit:1427 */
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_need_before_epsilons");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1427);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[7])(fra.me.REG[7]);
-        REGB3 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-        /* ./parser//parser.nit:1429 */
-        if (UNTAG_Bool(REGB3)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_need_after_epsilons");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1429);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        fra.me.REG[7] = CALL_abstract_collection___Collection___iterator(fra.me.REG[7])(fra.me.REG[7]);
-        while(1) {
-          REGB3 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[7])(fra.me.REG[7]);
-          if (UNTAG_Bool(REGB3)) {
-            fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[7])(fra.me.REG[7]);
-            REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-            /* ./parser//parser.nit:1432 */
-            if (UNTAG_Bool(REGB3)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1432);
-              nit_exit(1);
-            }
-            fra.me.REG[5] = 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)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1432);
-              nit_exit(1);
-            }
-            REGB3 = CALL_location___Location___line_end(fra.me.REG[2])(fra.me.REG[2]);
-            REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-            if (UNTAG_Bool(REGB2)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1432);
-              nit_exit(1);
-            }
-            REGB2 = CALL_location___Location___line_end(fra.me.REG[2])(fra.me.REG[2]);
-            REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1432);
-              nit_exit(1);
-            }
-            REGB1 = CALL_location___Location___column_end(fra.me.REG[2])(fra.me.REG[2]);
-            REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-            if (UNTAG_Bool(REGB0)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1432);
-              nit_exit(1);
-            }
-            REGB0 = CALL_location___Location___column_end(fra.me.REG[2])(fra.me.REG[2]);
-            fra.me.REG[5] = NEW_Location_location___Location___init(fra.me.REG[5], REGB3, REGB2, REGB1, REGB0);
-            CALL_parser_nodes___Prod___location__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-          } else {
-            /* ./parser//parser.nit:1429 */
-            goto label5;
-          }
-          CALL_abstract_collection___Iterator___next(fra.me.REG[7])(fra.me.REG[7]);
-        }
-        label5: while(0);
-        REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-        /* ./parser//parser.nit:1434 */
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_need_after_epsilons");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1434);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[7])(fra.me.REG[7]);
-      } else {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser.nit:1438 */
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB1)) {
-            REGB1 = TAG_Bool(false);
-            REGB0 = REGB1;
-          } else {
-            REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB1;
-          }
-        }
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser.nit:1440 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_need_before_epsilons");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1440);
-            nit_exit(1);
-          }
-          fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-          array___Array___add(fra.me.REG[2], fra.me.REG[1]);
-        } else {
-          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser.nit:1443 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_need_after_epsilons");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1443);
-            nit_exit(1);
-          }
-          fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-          array___Array___add(fra.me.REG[0], fra.me.REG[1]);
-        }
-      }
-    }
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_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 = 1449;
-  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1449 */
-  CALL_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;
-}
-void parser___ReduceAction___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1454;
-  fra.me.meth = LOCATE_parser___ReduceAction___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  /* ./parser//parser.nit:1454 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1454);
-  nit_exit(1);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction___init(val_t p0, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction].i;
-  struct {struct stack_frame_t me;} fra;
-  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.meth = LOCATE_parser___ReduceAction___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
-  return;
-}
-void parser___ReduceAction0___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 = 1459;
-  fra.me.meth = LOCATE_parser___ReduceAction0___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1470 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction0___init(val_t p0, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction0].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1472;
-  fra.me.meth = LOCATE_parser___ReduceAction0___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1472 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1476;
-  fra.me.meth = LOCATE_parser___ReduceAction1___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1483 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1483);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[2], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1490 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1___init(val_t p0, int* init_table){
-  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos5]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1492;
-  fra.me.meth = LOCATE_parser___ReduceAction1___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1492 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1496;
-  fra.me.meth = LOCATE_parser___ReduceAction2___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1503 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1503);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:1505 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:1506 */
-  } else {
-    /* ./parser//parser.nit:1508 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1517 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction2___init(val_t p0, int* init_table){
-  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction2].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1519;
-  fra.me.meth = LOCATE_parser___ReduceAction2___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1519 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1523;
-  fra.me.meth = LOCATE_parser___ReduceAction3___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1531 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1531);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1533 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1533);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:1535 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:1536 */
-  } else {
-    /* ./parser//parser.nit:1538 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1547 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction3___init(val_t p0, int* init_table){
-  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction3].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos7]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1549;
-  fra.me.meth = LOCATE_parser___ReduceAction3___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1549 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1553;
-  fra.me.meth = LOCATE_parser___ReduceAction4___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1560 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1560);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:1562 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:1563 */
-  } else {
-    /* ./parser//parser.nit:1565 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1574 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction4___init(val_t p0, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction4].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1576;
-  fra.me.meth = LOCATE_parser___ReduceAction4___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1576 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1580;
-  fra.me.meth = LOCATE_parser___ReduceAction5___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1588 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1588);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1590);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:1592 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:1593 */
-  } else {
-    /* ./parser//parser.nit:1595 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1604 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction5___init(val_t p0, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction5].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos9]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1606;
-  fra.me.meth = LOCATE_parser___ReduceAction5___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1606 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1610;
-  fra.me.meth = LOCATE_parser___ReduceAction6___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:1618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1618);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:1620 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1621 */
-  } else {
-    /* ./parser//parser.nit:1623 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1627 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1627);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:1629 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:1630 */
-  } else {
-    /* ./parser//parser.nit:1632 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1641 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction6___init(val_t p0, int* init_table){
-  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction6].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1643;
-  fra.me.meth = LOCATE_parser___ReduceAction6___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1643 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1647;
-  fra.me.meth = LOCATE_parser___ReduceAction7___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1656 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1656);
-    nit_exit(1);
-  }
-  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:1658 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1658);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:1660 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1661 */
-  } else {
-    /* ./parser//parser.nit:1663 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1667 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1667);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:1669 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:1670 */
-  } else {
-    /* ./parser//parser.nit:1672 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1681 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction7___init(val_t p0, int* init_table){
-  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction7].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1683;
-  fra.me.meth = LOCATE_parser___ReduceAction7___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1683 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1687;
-  fra.me.meth = LOCATE_parser___ReduceAction8___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:1696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1696);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:1697 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1698 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:1703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1704 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-  }
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1712 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction8___init(val_t p0, int* init_table){
-  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction8].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1714;
-  fra.me.meth = LOCATE_parser___ReduceAction8___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1714 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1718;
-  fra.me.meth = LOCATE_parser___ReduceAction9___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:1728 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1728);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1730 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1730);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1732 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:1735 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:1736 */
-  } else {
-    /* ./parser//parser.nit:1738 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:1744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1745 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1753 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction9___init(val_t p0, int* init_table){
-  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction9].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1755;
-  fra.me.meth = LOCATE_parser___ReduceAction9___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1755 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 1759;
-  fra.me.meth = LOCATE_parser___ReduceAction10___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1768 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1768);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:1771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1771);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:1772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1773 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:1778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1779 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1787 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction10___init(val_t p0, int* init_table){
-  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction10].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1789;
-  fra.me.meth = LOCATE_parser___ReduceAction10___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1789 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 1793;
-  fra.me.meth = LOCATE_parser___ReduceAction11___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1803);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:1806 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1806);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1808);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1810 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:1813 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:1814 */
-  } else {
-    /* ./parser//parser.nit:1816 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:1822 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1823 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1831 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction11___init(val_t p0, int* init_table){
-  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction11].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1833;
-  fra.me.meth = LOCATE_parser___ReduceAction11___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1833 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1837;
-  fra.me.meth = LOCATE_parser___ReduceAction12___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:1846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1846);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:1848 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1849 */
-  } else {
-    /* ./parser//parser.nit:1851 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:1856 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1856);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:1857 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1858 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[3]);
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1863 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1864 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1872 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction12___init(val_t p0, int* init_table){
-  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction12].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1874;
-  fra.me.meth = LOCATE_parser___ReduceAction12___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1874 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1878;
-  fra.me.meth = LOCATE_parser___ReduceAction13___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:1888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1888);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:1890 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1891 */
-  } else {
-    /* ./parser//parser.nit:1893 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:1898 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1898);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1900 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1900);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1902 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:1905 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:1906 */
-  } else {
-    /* ./parser//parser.nit:1908 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:1914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1915 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1923 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction13___init(val_t p0, int* init_table){
-  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction13].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1925;
-  fra.me.meth = LOCATE_parser___ReduceAction13___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1925 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 1929;
-  fra.me.meth = LOCATE_parser___ReduceAction14___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1939 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1939);
-    nit_exit(1);
-  }
-  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:1941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1941);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:1943 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1944 */
-  } else {
-    /* ./parser//parser.nit:1946 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:1951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1951);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:1952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1953 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[3]);
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1959 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:1967 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction14___init(val_t p0, int* init_table){
-  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction14].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 1969;
-  fra.me.meth = LOCATE_parser___ReduceAction14___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:1969 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 1973;
-  fra.me.meth = LOCATE_parser___ReduceAction15___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:1984 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1984);
-    nit_exit(1);
-  }
-  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:1986 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1986);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:1988 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1989 */
-  } else {
-    /* ./parser//parser.nit:1991 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:1996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1996);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:1998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 1998);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:1999 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2000 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:2003 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:2004 */
-  } else {
-    /* ./parser//parser.nit:2006 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2012 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2013 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2021 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction15___init(val_t p0, int* init_table){
-  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction15].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2023;
-  fra.me.meth = LOCATE_parser___ReduceAction15___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2023 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2027;
-  fra.me.meth = LOCATE_parser___ReduceAction16___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:2036 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2036);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2039);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2040 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2041 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2047 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2048 */
-  } else {
-    /* ./parser//parser.nit:2050 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:2053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2054 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2062 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction16___init(val_t p0, int* init_table){
-  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction16].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2064;
-  fra.me.meth = LOCATE_parser___ReduceAction16___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2064 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2068;
-  fra.me.meth = LOCATE_parser___ReduceAction17___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:2078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2078);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:2081 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2081);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:2083 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2083);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2085 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2088 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:2089 */
-  } else {
-    /* ./parser//parser.nit:2091 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2098 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:2099 */
-  } else {
-    /* ./parser//parser.nit:2101 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:2104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2105 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2113 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction17___init(val_t p0, int* init_table){
-  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction17].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos21]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2115;
-  fra.me.meth = LOCATE_parser___ReduceAction17___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2115 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2119;
-  fra.me.meth = LOCATE_parser___ReduceAction18___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2129);
-    nit_exit(1);
-  }
-  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:2131 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2131);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2134 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2134);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2136 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2142 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:2143 */
-  } else {
-    /* ./parser//parser.nit:2145 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:2148 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2149 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2157 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction18___init(val_t p0, int* init_table){
-  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction18].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2159;
-  fra.me.meth = LOCATE_parser___ReduceAction18___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2159 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[8];} fra;
-  val_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 = 2163;
-  fra.me.meth = LOCATE_parser___ReduceAction19___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2174);
-    nit_exit(1);
-  }
-  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:2176 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2176);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:2179 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2179);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:2181 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2181);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2183 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:2186 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:2187 */
-  } else {
-    /* ./parser//parser.nit:2189 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2196 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:2197 */
-  } else {
-    /* ./parser//parser.nit:2199 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-  /* ./parser//parser.nit:2202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2203 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2211 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction19___init(val_t p0, int* init_table){
-  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction19].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2213;
-  fra.me.meth = LOCATE_parser___ReduceAction19___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2213 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 2217;
-  fra.me.meth = LOCATE_parser___ReduceAction20___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:2227 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2227);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2229 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:2230 */
-  } else {
-    /* ./parser//parser.nit:2232 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  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:2236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2236);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2239 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2239);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2240 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2241 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2247 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:2248 */
-  } else {
-    /* ./parser//parser.nit:2250 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2253 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2254 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2262 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction20___init(val_t p0, int* init_table){
-  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction20].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2264;
-  fra.me.meth = LOCATE_parser___ReduceAction20___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2264 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 2268;
-  fra.me.meth = LOCATE_parser___ReduceAction21___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:2279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2279);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2281 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:2282 */
-  } else {
-    /* ./parser//parser.nit:2284 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
-  }
-  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:2288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2288);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:2291 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2291);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:2293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2293);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2295 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2298 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:2299 */
-  } else {
-    /* ./parser//parser.nit:2301 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2308 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:2309 */
-  } else {
-    /* ./parser//parser.nit:2311 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:2314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2315 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2323 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction21___init(val_t p0, int* init_table){
-  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction21].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2325;
-  fra.me.meth = LOCATE_parser___ReduceAction21___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2325 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 2329;
-  fra.me.meth = LOCATE_parser___ReduceAction22___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2340 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2340);
-    nit_exit(1);
-  }
-  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:2342 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2342);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2344 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:2345 */
-  } else {
-    /* ./parser//parser.nit:2347 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  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:2351 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2351);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2354 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2354);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2355 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2356 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2362 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:2363 */
-  } else {
-    /* ./parser//parser.nit:2365 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2369 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2377 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction22___init(val_t p0, int* init_table){
-  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction22].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2379;
-  fra.me.meth = LOCATE_parser___ReduceAction22___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2379 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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;
-  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 = 2383;
-  fra.me.meth = LOCATE_parser___ReduceAction23___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2395 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2395);
-    nit_exit(1);
-  }
-  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:2397 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2397);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2399 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:2400 */
-  } else {
-    /* ./parser//parser.nit:2402 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
-  }
-  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:2406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2406);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:2409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2409);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:2411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2411);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2413 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2416 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:2417 */
-  } else {
-    /* ./parser//parser.nit:2419 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:2426 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:2427 */
-  } else {
-    /* ./parser//parser.nit:2429 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:2432 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2433 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[5]);
-  }
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2441 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction23___init(val_t p0, int* init_table){
-  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction23].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2443;
-  fra.me.meth = LOCATE_parser___ReduceAction23___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2443 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2447;
-  fra.me.meth = LOCATE_parser___ReduceAction24___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2454 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2454);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2455 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2456 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2464 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction24___init(val_t p0, int* init_table){
-  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction24].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2466;
-  fra.me.meth = LOCATE_parser___ReduceAction24___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2466 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2470;
-  fra.me.meth = LOCATE_parser___ReduceAction25___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2478 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2478);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2480);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2481 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2482 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2490 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction25___init(val_t p0, int* init_table){
-  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction25].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2492;
-  fra.me.meth = LOCATE_parser___ReduceAction25___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2492 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2496;
-  fra.me.meth = LOCATE_parser___ReduceAction26___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:2504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2504);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:2506 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:2507 */
-  } else {
-    /* ./parser//parser.nit:2509 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2513);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2515 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2523 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction26___init(val_t p0, int* init_table){
-  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction26].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2525;
-  fra.me.meth = LOCATE_parser___ReduceAction26___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2525 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2529;
-  fra.me.meth = LOCATE_parser___ReduceAction27___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2538);
-    nit_exit(1);
-  }
-  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:2540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2540);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2542 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2543 */
-  } else {
-    /* ./parser//parser.nit:2545 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2549);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2551 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2559 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction27___init(val_t p0, int* init_table){
-  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction27].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2561;
-  fra.me.meth = LOCATE_parser___ReduceAction27___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2561 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2565;
-  fra.me.meth = LOCATE_parser___ReduceAction28___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:2573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2573);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2575 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2575);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2577 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2578 */
-  } else {
-    /* ./parser//parser.nit:2580 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2583 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2584 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2592 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction28___init(val_t p0, int* init_table){
-  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction28].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2594;
-  fra.me.meth = LOCATE_parser___ReduceAction28___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2594 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2598;
-  fra.me.meth = LOCATE_parser___ReduceAction29___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2607);
-    nit_exit(1);
-  }
-  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:2609 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2609);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2611 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2611);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2613 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:2614 */
-  } else {
-    /* ./parser//parser.nit:2616 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2620 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2628 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction29___init(val_t p0, int* init_table){
-  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction29].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos33]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2630;
-  fra.me.meth = LOCATE_parser___ReduceAction29___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2630 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2634;
-  fra.me.meth = LOCATE_parser___ReduceAction30___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:2643 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2643);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2645 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:2646 */
-  } else {
-    /* ./parser//parser.nit:2648 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  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:2652 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2652);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2654 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2654);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2656 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:2657 */
-  } else {
-    /* ./parser//parser.nit:2659 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2663 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2671 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction30___init(val_t p0, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction30].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2673;
-  fra.me.meth = LOCATE_parser___ReduceAction30___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2673 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2677;
-  fra.me.meth = LOCATE_parser___ReduceAction31___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2687);
-    nit_exit(1);
-  }
-  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:2689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2689);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2691 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:2692 */
-  } else {
-    /* ./parser//parser.nit:2694 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  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:2698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2698);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2700);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2702 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:2703 */
-  } else {
-    /* ./parser//parser.nit:2705 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2709 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2717 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction31___init(val_t p0, int* init_table){
-  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction31].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2719;
-  fra.me.meth = LOCATE_parser___ReduceAction31___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2719 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2723;
-  fra.me.meth = LOCATE_parser___ReduceAction32___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:2733 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2733);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2734 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2735 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2741 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2741);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:2742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2743 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2745 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2746 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2754 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction32___init(val_t p0, int* init_table){
-  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction32].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2756;
-  fra.me.meth = LOCATE_parser___ReduceAction32___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2756 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2760;
-  fra.me.meth = LOCATE_parser___ReduceAction33___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2771);
-    nit_exit(1);
-  }
-  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:2773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2773);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2774 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2775 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:2778 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:2779 */
-  } else {
-    /* ./parser//parser.nit:2781 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2788 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2788);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:2789 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2790 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2793 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2801 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction33___init(val_t p0, int* init_table){
-  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction33].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos37]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2803;
-  fra.me.meth = LOCATE_parser___ReduceAction33___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2803 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2807;
-  fra.me.meth = LOCATE_parser___ReduceAction34___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2817);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:2820 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2820);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2822 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2828 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2828);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:2829 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2830 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2832 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2833 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2841 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction34___init(val_t p0, int* init_table){
-  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction34].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2843;
-  fra.me.meth = LOCATE_parser___ReduceAction34___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2843 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[8];} fra;
-  val_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 = 2847;
-  fra.me.meth = LOCATE_parser___ReduceAction35___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:2858 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2858);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2861 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2861);
-    nit_exit(1);
-  }
-  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:2863 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2863);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2865 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:2868 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:2869 */
-  } else {
-    /* ./parser//parser.nit:2871 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2878 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2878);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-  /* ./parser//parser.nit:2879 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2880 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2882 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2883 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2891 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction35___init(val_t p0, int* init_table){
-  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction35].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2893;
-  fra.me.meth = LOCATE_parser___ReduceAction35___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2893 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[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 = 2897;
-  fra.me.meth = LOCATE_parser___ReduceAction36___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:2907 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2907);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2909 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:2910 */
-  } else {
-    /* ./parser//parser.nit:2912 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:2917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2917);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:2918 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2919 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2925);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2926 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2927 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2929 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2930 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2938 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction36___init(val_t p0, int* init_table){
-  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction36].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 2940;
-  fra.me.meth = LOCATE_parser___ReduceAction36___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2940 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  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[7];} fra;
-  val_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 = 2944;
-  fra.me.meth = LOCATE_parser___ReduceAction37___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:2955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2955);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:2957 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:2958 */
-  } else {
-    /* ./parser//parser.nit:2960 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:2965 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2965);
-    nit_exit(1);
-  }
-  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:2967 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2967);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:2968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2969 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:2972 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2973 */
-  } else {
-    /* ./parser//parser.nit:2975 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:2982 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 2982);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:2983 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2984 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:2986 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2987 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:2995 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction37___init(val_t p0, int* init_table){
-  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction37].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos41]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2997;
-  fra.me.meth = LOCATE_parser___ReduceAction37___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:2997 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos41] = 1;
-  return;
-}
-void parser___ReduceAction38___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 3001;
-  fra.me.meth = LOCATE_parser___ReduceAction38___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3012 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3012);
-    nit_exit(1);
-  }
-  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:3014 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3014);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:3016 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:3017 */
-  } else {
-    /* ./parser//parser.nit:3019 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:3024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3024);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3025 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3026 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3032 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3032);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3034 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3036 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3037 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3045 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction38___init(val_t p0, int* init_table){
-  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction38].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3047;
-  fra.me.meth = LOCATE_parser___ReduceAction38___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3047 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos42] = 1;
-  return;
-}
-void parser___ReduceAction39___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 3051;
-  fra.me.meth = LOCATE_parser___ReduceAction39___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3063);
-    nit_exit(1);
-  }
-  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:3065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3065);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3067 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:3068 */
-  } else {
-    /* ./parser//parser.nit:3070 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3075 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3075);
-    nit_exit(1);
-  }
-  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:3077 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3077);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3079 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:3082 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:3083 */
-  } else {
-    /* ./parser//parser.nit:3085 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3092);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:3093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3094 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3096 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3097 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3105 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction39___init(val_t p0, int* init_table){
-  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction39].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3107;
-  fra.me.meth = LOCATE_parser___ReduceAction39___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3107 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos43] = 1;
-  return;
-}
-void parser___ReduceAction40___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 3111;
-  fra.me.meth = LOCATE_parser___ReduceAction40___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:3121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3121);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:3124 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3124);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3125 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3126 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3132 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3132);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:3134 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:3135 */
-  } else {
-    /* ./parser//parser.nit:3137 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser.nit:3140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3141 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3143 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3144 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3152 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction40___init(val_t p0, int* init_table){
-  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction40].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3154;
-  fra.me.meth = LOCATE_parser___ReduceAction40___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3154 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos44] = 1;
-  return;
-}
-void parser___ReduceAction41___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 3158;
-  fra.me.meth = LOCATE_parser___ReduceAction41___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:3169 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3169);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3172);
-    nit_exit(1);
-  }
-  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:3174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3174);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3175 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3176 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3179 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:3180 */
-  } else {
-    /* ./parser//parser.nit:3182 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3189);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3191 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:3192 */
-  } else {
-    /* ./parser//parser.nit:3194 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-  /* ./parser//parser.nit:3197 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3198 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3201 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3209 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction41___init(val_t p0, int* init_table){
-  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction41].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos45]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3211;
-  fra.me.meth = LOCATE_parser___ReduceAction41___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3211 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos45] = 1;
-  return;
-}
-void parser___ReduceAction42___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 3215;
-  fra.me.meth = LOCATE_parser___ReduceAction42___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3226);
-    nit_exit(1);
-  }
-  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:3228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3228);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:3231 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3231);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3233 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3239 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3239);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3241 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:3242 */
-  } else {
-    /* ./parser//parser.nit:3244 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-  /* ./parser//parser.nit:3247 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3248 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3251 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3259 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction42___init(val_t p0, int* init_table){
-  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction42].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3261;
-  fra.me.meth = LOCATE_parser___ReduceAction42___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3261 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos46] = 1;
-  return;
-}
-void parser___ReduceAction43___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 3265;
-  fra.me.meth = LOCATE_parser___ReduceAction43___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3277);
-    nit_exit(1);
-  }
-  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:3279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3279);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3282 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3282);
-    nit_exit(1);
-  }
-  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:3284 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3284);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3286 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:3289 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:3290 */
-  } else {
-    /* ./parser//parser.nit:3292 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  fra.me.REG[9] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3299 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3299);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3301 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:3302 */
-  } else {
-    /* ./parser//parser.nit:3304 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-  /* ./parser//parser.nit:3307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3308 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3310 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3311 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3319 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction43___init(val_t p0, int* init_table){
-  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction43].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3321;
-  fra.me.meth = LOCATE_parser___ReduceAction43___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3321 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos47] = 1;
-  return;
-}
-void parser___ReduceAction44___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 3325;
-  fra.me.meth = LOCATE_parser___ReduceAction44___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:3336 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3336);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:3338 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:3339 */
-  } else {
-    /* ./parser//parser.nit:3341 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
-  }
-  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:3345 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3345);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:3348 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3348);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3349 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3350 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3356 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3356);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3358 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:3359 */
-  } else {
-    /* ./parser//parser.nit:3361 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:3364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3365 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3368 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3376 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction44___init(val_t p0, int* init_table){
-  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction44].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3378;
-  fra.me.meth = LOCATE_parser___ReduceAction44___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3378 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos48] = 1;
-  return;
-}
-void parser___ReduceAction45___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 3382;
-  fra.me.meth = LOCATE_parser___ReduceAction45___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:3394 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3394);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3396 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[6];
-  /* ./parser//parser.nit:3397 */
-  } else {
-    /* ./parser//parser.nit:3399 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
-  }
-  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:3403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3403);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3406);
-    nit_exit(1);
-  }
-  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:3408 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3408);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3410 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:3413 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:3414 */
-  } else {
-    /* ./parser//parser.nit:3416 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3423);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3425 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:3426 */
-  } else {
-    /* ./parser//parser.nit:3428 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:3431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3432 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[6]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3434 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3435 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3443 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction45___init(val_t p0, int* init_table){
-  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction45].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos49]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3445;
-  fra.me.meth = LOCATE_parser___ReduceAction45___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3445 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos49] = 1;
-  return;
-}
-void parser___ReduceAction46___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 3449;
-  fra.me.meth = LOCATE_parser___ReduceAction46___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3461);
-    nit_exit(1);
-  }
-  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:3463 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3463);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3465 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:3466 */
-  } else {
-    /* ./parser//parser.nit:3468 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
-  }
-  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:3472 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3472);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:3475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3475);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3476 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3477 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3483 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3483);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3485 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:3486 */
-  } else {
-    /* ./parser//parser.nit:3488 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser.nit:3491 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3492 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3494 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3495 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3503 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction46___init(val_t p0, int* init_table){
-  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction46].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3505;
-  fra.me.meth = LOCATE_parser___ReduceAction46___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3505 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos50] = 1;
-  return;
-}
-void parser___ReduceAction47___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 3509;
-  fra.me.meth = LOCATE_parser___ReduceAction47___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_APackagedecl, ID_APackagedecl)) /*cast nullable APackagedecl*/;
-  /* ./parser//parser.nit:3522 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3522);
-    nit_exit(1);
-  }
-  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:3524 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3524);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3526 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[6];
-  /* ./parser//parser.nit:3527 */
-  } else {
-    /* ./parser//parser.nit:3529 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
-  }
-  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:3533 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3533);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3536);
-    nit_exit(1);
-  }
-  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:3538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3538);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:3539 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3540 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:3543 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:3544 */
-  } else {
-    /* ./parser//parser.nit:3546 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:3553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3553);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:3555 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[5];
-  /* ./parser//parser.nit:3556 */
-  } else {
-    /* ./parser//parser.nit:3558 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser.nit:3561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3562 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[6]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3564 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3565 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[2]);
-  }
-  fra.me.REG[9] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  fra.me.REG[0] = fra.me.REG[9];
-  REGB0 = TAG_Int(0);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3573 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction47___init(val_t p0, int* init_table){
-  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction47].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos51]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3575;
-  fra.me.meth = LOCATE_parser___ReduceAction47___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3575 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 1;
-  return;
-}
-void parser___ReduceAction48___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 = 3579;
-  fra.me.meth = LOCATE_parser___ReduceAction48___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  /* ./parser//parser.nit:3588 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3588);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwpackage, ID_TKwpackage)) /*cast nullable TKwpackage*/;
-  /* ./parser//parser.nit:3590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3590);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:3592 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3592);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_APackagedecl_parser_prod___APackagedecl___init_apackagedecl(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3599 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction48___init(val_t p0, int* init_table){
-  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction48].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3601;
-  fra.me.meth = LOCATE_parser___ReduceAction48___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3601 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos52] = 1;
-  return;
-}
-void parser___ReduceAction49___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 = 3605;
-  fra.me.meth = LOCATE_parser___ReduceAction49___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:3615 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3615);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
-  /* ./parser//parser.nit:3617 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3617);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:3619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3619);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AStdImport_parser_prod___AStdImport___init_astdimport(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3626 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction49___init(val_t p0, int* init_table){
-  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction49].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos53]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3628;
-  fra.me.meth = LOCATE_parser___ReduceAction49___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3628 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
-  return;
-}
-void parser___ReduceAction50___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 = 3632;
-  fra.me.meth = LOCATE_parser___ReduceAction50___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:3642 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3642);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
-  /* ./parser//parser.nit:3644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3644);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwend, ID_TKwend)) /*cast nullable TKwend*/;
-  /* ./parser//parser.nit:3646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3646);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ANoImport_parser_prod___ANoImport___init_anoimport(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3653 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction50___init(val_t p0, int* init_table){
-  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction50].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3655;
-  fra.me.meth = LOCATE_parser___ReduceAction50___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3655 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos54] = 1;
-  return;
-}
-void parser___ReduceAction51___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3659;
-  fra.me.meth = LOCATE_parser___ReduceAction51___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:3665 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3665);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3667 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_AMainClassdef_parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(3);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3673 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction51___init(val_t p0, int* init_table){
-  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction51].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3675;
-  fra.me.meth = LOCATE_parser___ReduceAction51___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3675 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
-  return;
-}
-void parser___ReduceAction52___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 = 3679;
-  fra.me.meth = LOCATE_parser___ReduceAction52___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[0] = NIT_NULL;
-  REGB0 = TAG_Int(3);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3684 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction52___init(val_t p0, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction52].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3686;
-  fra.me.meth = LOCATE_parser___ReduceAction52___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3686 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
-  return;
-}
-void parser___ReduceAction53___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3690;
-  fra.me.meth = LOCATE_parser___ReduceAction53___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:3698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3698);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:3699 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3700 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(4);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3710 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction53___init(val_t p0, int* init_table){
-  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction53].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos57]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3712;
-  fra.me.meth = LOCATE_parser___ReduceAction53___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3712 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
-  return;
-}
-void parser___ReduceAction54___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 = 3716;
-  fra.me.meth = LOCATE_parser___ReduceAction54___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:3725 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3725);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:3727 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3727);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:3728 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:3729 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:3732 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:3733 */
-  } else {
-    /* ./parser//parser.nit:3735 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(4);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3746 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction54___init(val_t p0, int* init_table){
-  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction54].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3748;
-  fra.me.meth = LOCATE_parser___ReduceAction54___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3748 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos58] = 1;
-  return;
-}
-void parser___ReduceAction55___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 = 3752;
-  fra.me.meth = LOCATE_parser___ReduceAction55___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:3766 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3766);
-    nit_exit(1);
-  }
-  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:3768 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3768);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
-  /* ./parser//parser.nit:3770 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3770);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:3772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3772);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3784 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction55___init(val_t p0, int* init_table){
-  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction55].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3786;
-  fra.me.meth = LOCATE_parser___ReduceAction55___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3786 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
-  return;
-}
-void parser___ReduceAction56___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 = 3790;
-  fra.me.meth = LOCATE_parser___ReduceAction56___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:3805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3805);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:3807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3807);
-    nit_exit(1);
-  }
-  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:3809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3809);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
-  /* ./parser//parser.nit:3811 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3811);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:3813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3813);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  fra.me.REG[0] = fra.me.REG[9];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3825 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction56___init(val_t p0, int* init_table){
-  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction56].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3827;
-  fra.me.meth = LOCATE_parser___ReduceAction56___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3827 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos60] = 1;
-  return;
-}
-void parser___ReduceAction57___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 = 3831;
-  fra.me.meth = LOCATE_parser___ReduceAction57___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:3846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3846);
-    nit_exit(1);
-  }
-  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:3848 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3848);
-    nit_exit(1);
-  }
-  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:3850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3850);
-    nit_exit(1);
-  }
-  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:3852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3852);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:3854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3854);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:3856 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:3857 */
-  } else {
-    /* ./parser//parser.nit:3859 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[9];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3873 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction57___init(val_t p0, int* init_table){
-  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction57].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3875;
-  fra.me.meth = LOCATE_parser___ReduceAction57___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3875 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
-  return;
-}
-void parser___ReduceAction58___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 = 3879;
-  fra.me.meth = LOCATE_parser___ReduceAction58___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:3895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3895);
-    nit_exit(1);
-  }
-  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:3897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3897);
-    nit_exit(1);
-  }
-  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:3899 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3899);
-    nit_exit(1);
-  }
-  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:3901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3901);
-    nit_exit(1);
-  }
-  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:3903 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3903);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:3905 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3905);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3907 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:3908 */
-  } else {
-    /* ./parser//parser.nit:3910 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3924 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction58___init(val_t p0, int* init_table){
-  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction58].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3926;
-  fra.me.meth = LOCATE_parser___ReduceAction58___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3926 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos62] = 1;
-  return;
-}
-void parser___ReduceAction59___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 = 3930;
-  fra.me.meth = LOCATE_parser___ReduceAction59___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:3945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3945);
-    nit_exit(1);
-  }
-  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:3947 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3947);
-    nit_exit(1);
-  }
-  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:3949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3949);
-    nit_exit(1);
-  }
-  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:3951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3951);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:3953 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3953);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:3955 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:3956 */
-  } else {
-    /* ./parser//parser.nit:3958 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[9];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:3972 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction59___init(val_t p0, int* init_table){
-  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction59].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 3974;
-  fra.me.meth = LOCATE_parser___ReduceAction59___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:3974 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
-  return;
-}
-void parser___ReduceAction60___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 = 3978;
-  fra.me.meth = LOCATE_parser___ReduceAction60___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:3994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3994);
-    nit_exit(1);
-  }
-  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:3996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3996);
-    nit_exit(1);
-  }
-  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:3998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 3998);
-    nit_exit(1);
-  }
-  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:4000 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4000);
-    nit_exit(1);
-  }
-  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:4002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4002);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4004 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4004);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4006 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[2];
-  /* ./parser//parser.nit:4007 */
-  } else {
-    /* ./parser//parser.nit:4009 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4023 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction60___init(val_t p0, int* init_table){
-  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction60].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4025;
-  fra.me.meth = LOCATE_parser___ReduceAction60___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4025 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos64] = 1;
-  return;
-}
-void parser___ReduceAction61___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 = 4029;
-  fra.me.meth = LOCATE_parser___ReduceAction61___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:4045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4045);
-    nit_exit(1);
-  }
-  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:4047 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4047);
-    nit_exit(1);
-  }
-  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:4049 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4049);
-    nit_exit(1);
-  }
-  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:4051 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4051);
-    nit_exit(1);
-  }
-  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:4053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4053);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:4055 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:4056 */
-  } else {
-    /* ./parser//parser.nit:4058 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4062 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4062);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4064 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[2];
-  /* ./parser//parser.nit:4065 */
-  } else {
-    /* ./parser//parser.nit:4067 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4081 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction61___init(val_t p0, int* init_table){
-  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction61].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos65]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4083;
-  fra.me.meth = LOCATE_parser___ReduceAction61___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4083 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
-  return;
-}
-void parser___ReduceAction62___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 = 4087;
-  fra.me.meth = LOCATE_parser___ReduceAction62___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4104);
-    nit_exit(1);
-  }
-  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:4106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4106);
-    nit_exit(1);
-  }
-  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:4108 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4108);
-    nit_exit(1);
-  }
-  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:4110 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4110);
-    nit_exit(1);
-  }
-  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:4112 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4112);
-    nit_exit(1);
-  }
-  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:4114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4114);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4116 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:4117 */
-  } else {
-    /* ./parser//parser.nit:4119 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4123);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4125 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[2];
-  /* ./parser//parser.nit:4126 */
-  } else {
-    /* ./parser//parser.nit:4128 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4142 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction62___init(val_t p0, int* init_table){
-  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction62].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4144;
-  fra.me.meth = LOCATE_parser___ReduceAction62___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4144 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos66] = 1;
-  return;
-}
-void parser___ReduceAction63___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 4148;
-  fra.me.meth = LOCATE_parser___ReduceAction63___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:4164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4164);
-    nit_exit(1);
-  }
-  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:4166 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4166);
-    nit_exit(1);
-  }
-  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:4168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4168);
-    nit_exit(1);
-  }
-  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:4170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4170);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4172);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4174 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[9];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4187 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction63___init(val_t p0, int* init_table){
-  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction63].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4189;
-  fra.me.meth = LOCATE_parser___ReduceAction63___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4189 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
-  return;
-}
-void parser___ReduceAction64___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
-  val_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 = 4193;
-  fra.me.meth = LOCATE_parser___ReduceAction64___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:4210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4210);
-    nit_exit(1);
-  }
-  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:4212 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4212);
-    nit_exit(1);
-  }
-  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:4214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4214);
-    nit_exit(1);
-  }
-  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:4216 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4216);
-    nit_exit(1);
-  }
-  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:4218 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4218);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4220 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4220);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4221 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4222 */
-    array___Array___add(fra.me.REG[10], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4225 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[2];
-  /* ./parser//parser.nit:4226 */
-  } else {
-    /* ./parser//parser.nit:4228 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4242 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction64___init(val_t p0, int* init_table){
-  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction64].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4244;
-  fra.me.meth = LOCATE_parser___ReduceAction64___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4244 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos68] = 1;
-  return;
-}
-void parser___ReduceAction65___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
-  val_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 = 4248;
-  fra.me.meth = LOCATE_parser___ReduceAction65___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:4265 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4265);
-    nit_exit(1);
-  }
-  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:4267 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4267);
-    nit_exit(1);
-  }
-  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:4269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4269);
-    nit_exit(1);
-  }
-  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:4271 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4271);
-    nit_exit(1);
-  }
-  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:4273 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4273);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4275 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4275);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4277 */
-    array___Array___add(fra.me.REG[10], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4290 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction65___init(val_t p0, int* init_table){
-  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction65].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos69]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4292;
-  fra.me.meth = LOCATE_parser___ReduceAction65___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4292 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
-  return;
-}
-void parser___ReduceAction66___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4296;
-  fra.me.meth = LOCATE_parser___ReduceAction66___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4314);
-    nit_exit(1);
-  }
-  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:4316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4316);
-    nit_exit(1);
-  }
-  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:4318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4318);
-    nit_exit(1);
-  }
-  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:4320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4320);
-    nit_exit(1);
-  }
-  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:4322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4322);
-    nit_exit(1);
-  }
-  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:4324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4324);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4326);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4328 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:4331 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[2];
-  /* ./parser//parser.nit:4332 */
-  } else {
-    /* ./parser//parser.nit:4334 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4348 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction66___init(val_t p0, int* init_table){
-  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction66].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4350;
-  fra.me.meth = LOCATE_parser___ReduceAction66___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4350 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos70] = 1;
-  return;
-}
-void parser___ReduceAction67___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
-  val_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 = 4354;
-  fra.me.meth = LOCATE_parser___ReduceAction67___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:4371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4371);
-    nit_exit(1);
-  }
-  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:4373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4373);
-    nit_exit(1);
-  }
-  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:4375 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4375);
-    nit_exit(1);
-  }
-  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:4377 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4377);
-    nit_exit(1);
-  }
-  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:4379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4379);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:4381 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:4382 */
-  } else {
-    /* ./parser//parser.nit:4384 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4388 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4388);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4389 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4390 */
-    array___Array___add(fra.me.REG[10], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4403 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction67___init(val_t p0, int* init_table){
-  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction67].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4405;
-  fra.me.meth = LOCATE_parser___ReduceAction67___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4405 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
-  return;
-}
-void parser___ReduceAction68___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4409;
-  fra.me.meth = LOCATE_parser___ReduceAction68___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4427 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4427);
-    nit_exit(1);
-  }
-  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:4429 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4429);
-    nit_exit(1);
-  }
-  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:4431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4431);
-    nit_exit(1);
-  }
-  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:4433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4433);
-    nit_exit(1);
-  }
-  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:4435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4435);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4437 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:4438 */
-  } else {
-    /* ./parser//parser.nit:4440 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[4]);
-  }
-  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:4444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4444);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4446);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4447 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4448 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:4451 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[2];
-  /* ./parser//parser.nit:4452 */
-  } else {
-    /* ./parser//parser.nit:4454 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4468 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction68___init(val_t p0, int* init_table){
-  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction68].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4470;
-  fra.me.meth = LOCATE_parser___ReduceAction68___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4470 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos72] = 1;
-  return;
-}
-void parser___ReduceAction69___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4474;
-  fra.me.meth = LOCATE_parser___ReduceAction69___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4492 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4492);
-    nit_exit(1);
-  }
-  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:4494 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4494);
-    nit_exit(1);
-  }
-  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:4496 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4496);
-    nit_exit(1);
-  }
-  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:4498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4498);
-    nit_exit(1);
-  }
-  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:4500 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4500);
-    nit_exit(1);
-  }
-  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:4502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4502);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4504 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:4505 */
-  } else {
-    /* ./parser//parser.nit:4507 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4511);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4512 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4513 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4526 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction69___init(val_t p0, int* init_table){
-  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction69].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4528;
-  fra.me.meth = LOCATE_parser___ReduceAction69___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4528 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
-  return;
-}
-void parser___ReduceAction70___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
-  val_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 = 4532;
-  fra.me.meth = LOCATE_parser___ReduceAction70___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4551);
-    nit_exit(1);
-  }
-  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:4553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4553);
-    nit_exit(1);
-  }
-  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:4555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4555);
-    nit_exit(1);
-  }
-  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:4557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4557);
-    nit_exit(1);
-  }
-  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:4559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4559);
-    nit_exit(1);
-  }
-  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:4561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4561);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4563 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:4564 */
-  } else {
-    /* ./parser//parser.nit:4566 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[4]);
-  }
-  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:4570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4570);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4572 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4572);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4574 */
-    array___Array___add(fra.me.REG[12], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[12])(fra.me.REG[12]);
-  /* ./parser//parser.nit:4577 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[12] = fra.me.REG[2];
-  /* ./parser//parser.nit:4578 */
-  } else {
-    /* ./parser//parser.nit:4580 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[12])(fra.me.REG[12], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[12];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4594 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction70___init(val_t p0, int* init_table){
-  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction70].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4596;
-  fra.me.meth = LOCATE_parser___ReduceAction70___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4596 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos74] = 1;
-  return;
-}
-void parser___ReduceAction71___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
-  val_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 = 4600;
-  fra.me.meth = LOCATE_parser___ReduceAction71___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  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:4617 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4617);
-    nit_exit(1);
-  }
-  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:4619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4619);
-    nit_exit(1);
-  }
-  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:4621 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4621);
-    nit_exit(1);
-  }
-  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:4623 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4623);
-    nit_exit(1);
-  }
-  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:4625 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4625);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4627 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:4628 */
-  } else {
-    /* ./parser//parser.nit:4630 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4634 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4634);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4636 */
-    array___Array___add(fra.me.REG[10], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[10];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4649 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction71___init(val_t p0, int* init_table){
-  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction71].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4651;
-  fra.me.meth = LOCATE_parser___ReduceAction71___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4651 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
-  return;
-}
-void parser___ReduceAction72___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4655;
-  fra.me.meth = LOCATE_parser___ReduceAction72___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4673 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4673);
-    nit_exit(1);
-  }
-  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:4675 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4675);
-    nit_exit(1);
-  }
-  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:4677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4677);
-    nit_exit(1);
-  }
-  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:4679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4679);
-    nit_exit(1);
-  }
-  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:4681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4681);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4683 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:4684 */
-  } else {
-    /* ./parser//parser.nit:4686 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[4]);
-  }
-  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:4690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4690);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4692);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4694 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:4697 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[2];
-  /* ./parser//parser.nit:4698 */
-  } else {
-    /* ./parser//parser.nit:4700 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4714 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction72___init(val_t p0, int* init_table){
-  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction72].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4716;
-  fra.me.meth = LOCATE_parser___ReduceAction72___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4716 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos76] = 1;
-  return;
-}
-void parser___ReduceAction73___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4720;
-  fra.me.meth = LOCATE_parser___ReduceAction73___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4738);
-    nit_exit(1);
-  }
-  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:4740 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4740);
-    nit_exit(1);
-  }
-  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:4742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4742);
-    nit_exit(1);
-  }
-  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:4744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4744);
-    nit_exit(1);
-  }
-  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:4746 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4746);
-    nit_exit(1);
-  }
-  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:4748 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4748);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4750 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:4751 */
-  } else {
-    /* ./parser//parser.nit:4753 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4757 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4757);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4758 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4759 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4772 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction73___init(val_t p0, int* init_table){
-  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction73].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4774;
-  fra.me.meth = LOCATE_parser___ReduceAction73___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4774 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
-  return;
-}
-void parser___ReduceAction74___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
-  val_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 = 4778;
-  fra.me.meth = LOCATE_parser___ReduceAction74___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  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:4797 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4797);
-    nit_exit(1);
-  }
-  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:4799 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4799);
-    nit_exit(1);
-  }
-  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:4801 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4801);
-    nit_exit(1);
-  }
-  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:4803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4803);
-    nit_exit(1);
-  }
-  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:4805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4805);
-    nit_exit(1);
-  }
-  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:4807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4807);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:4809 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:4810 */
-  } else {
-    /* ./parser//parser.nit:4812 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[4]);
-  }
-  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:4816 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4816);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4818 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4818);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4820 */
-    array___Array___add(fra.me.REG[12], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[12])(fra.me.REG[12]);
-  /* ./parser//parser.nit:4823 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[12] = fra.me.REG[2];
-  /* ./parser//parser.nit:4824 */
-  } else {
-    /* ./parser//parser.nit:4826 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[12])(fra.me.REG[12], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[12];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4840 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction74___init(val_t p0, int* init_table){
-  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction74].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4842;
-  fra.me.meth = LOCATE_parser___ReduceAction74___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4842 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos78] = 1;
-  return;
-}
-void parser___ReduceAction75___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
-  val_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 = 4846;
-  fra.me.meth = LOCATE_parser___ReduceAction75___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  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:4864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4864);
-    nit_exit(1);
-  }
-  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:4866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4866);
-    nit_exit(1);
-  }
-  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:4868 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4868);
-    nit_exit(1);
-  }
-  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:4870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4870);
-    nit_exit(1);
-  }
-  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:4872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4872);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:4874 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:4875 */
-  } else {
-    /* ./parser//parser.nit:4877 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[4]);
-  }
-  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:4881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4881);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4883 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:4884 */
-  } else {
-    /* ./parser//parser.nit:4886 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:4890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4890);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:4891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4892 */
-    array___Array___add(fra.me.REG[11], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[11];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4905 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction75___init(val_t p0, int* init_table){
-  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction75].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4907;
-  fra.me.meth = LOCATE_parser___ReduceAction75___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4907 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos79] = 1;
-  return;
-}
-void parser___ReduceAction76___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
-  val_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 = 4911;
-  fra.me.meth = LOCATE_parser___ReduceAction76___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  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:4930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4930);
-    nit_exit(1);
-  }
-  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:4932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4932);
-    nit_exit(1);
-  }
-  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:4934 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4934);
-    nit_exit(1);
-  }
-  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:4936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4936);
-    nit_exit(1);
-  }
-  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:4938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4938);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:4940 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[5];
-  /* ./parser//parser.nit:4941 */
-  } else {
-    /* ./parser//parser.nit:4943 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[5]);
-  }
-  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:4947 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4947);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:4949 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:4950 */
-  } else {
-    /* ./parser//parser.nit:4952 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[4]);
-  }
-  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:4956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4956);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:4958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 4958);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:4959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:4960 */
-    array___Array___add(fra.me.REG[12], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[12])(fra.me.REG[12]);
-  /* ./parser//parser.nit:4963 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[12] = fra.me.REG[2];
-  /* ./parser//parser.nit:4964 */
-  } else {
-    /* ./parser//parser.nit:4966 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[12])(fra.me.REG[12], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[12];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:4980 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction76___init(val_t p0, int* init_table){
-  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction76].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 4982;
-  fra.me.meth = LOCATE_parser___ReduceAction76___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:4982 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos80] = 1;
-  return;
-}
-void parser___ReduceAction77___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
-  val_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 = 4986;
-  fra.me.meth = LOCATE_parser___ReduceAction77___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  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:5005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5005);
-    nit_exit(1);
-  }
-  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:5007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5007);
-    nit_exit(1);
-  }
-  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:5009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5009);
-    nit_exit(1);
-  }
-  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:5011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5011);
-    nit_exit(1);
-  }
-  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:5013 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5013);
-    nit_exit(1);
-  }
-  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:5015 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5015);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[10])(fra.me.REG[10]);
-  /* ./parser//parser.nit:5017 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:5018 */
-  } else {
-    /* ./parser//parser.nit:5020 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[4]);
-  }
-  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:5024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5024);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:5026 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:5027 */
-  } else {
-    /* ./parser//parser.nit:5029 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:5033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5033);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:5034 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:5035 */
-    array___Array___add(fra.me.REG[12], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[12];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5048 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction77___init(val_t p0, int* init_table){
-  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction77].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos81]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5050;
-  fra.me.meth = LOCATE_parser___ReduceAction77___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5050 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos81] = 1;
-  return;
-}
-void parser___ReduceAction78___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
-  val_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 = 5054;
-  fra.me.meth = LOCATE_parser___ReduceAction78___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
-  fra.me.REG[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[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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  fra.me.REG[13] = NEW_Array_array___Array___init();
-  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:5074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5074);
-    nit_exit(1);
-  }
-  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:5076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5076);
-    nit_exit(1);
-  }
-  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:5078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5078);
-    nit_exit(1);
-  }
-  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:5080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5080);
-    nit_exit(1);
-  }
-  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:5082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5082);
-    nit_exit(1);
-  }
-  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:5084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5084);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[11])(fra.me.REG[11]);
-  /* ./parser//parser.nit:5086 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[11] = fra.me.REG[5];
-  /* ./parser//parser.nit:5087 */
-  } else {
-    /* ./parser//parser.nit:5089 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[5]);
-  }
-  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:5093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5093);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[12])(fra.me.REG[12]);
-  /* ./parser//parser.nit:5095 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[12] = fra.me.REG[4];
-  /* ./parser//parser.nit:5096 */
-  } else {
-    /* ./parser//parser.nit:5098 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[12])(fra.me.REG[12], fra.me.REG[4]);
-  }
-  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:5102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5102);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:5104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5104);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:5105 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:5106 */
-    array___Array___add(fra.me.REG[13], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[13])(fra.me.REG[13]);
-  /* ./parser//parser.nit:5109 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[13] = fra.me.REG[2];
-  /* ./parser//parser.nit:5110 */
-  } else {
-    /* ./parser//parser.nit:5112 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[13])(fra.me.REG[13], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[13];
-  REGB0 = TAG_Int(5);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5126 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction78___init(val_t p0, int* init_table){
-  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction78].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5128;
-  fra.me.meth = LOCATE_parser___ReduceAction78___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5128 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos82] = 1;
-  return;
-}
-void parser___ReduceAction79___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 = 5132;
-  fra.me.meth = LOCATE_parser___ReduceAction79___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
-  /* ./parser//parser.nit:5137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5137);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteClasskind_parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(6);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5142 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction79___init(val_t p0, int* init_table){
-  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction79].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos83]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5144;
-  fra.me.meth = LOCATE_parser___ReduceAction79___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5144 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos83] = 1;
-  return;
-}
-void parser___ReduceAction80___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 = 5148;
-  fra.me.meth = LOCATE_parser___ReduceAction80___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwabstract, ID_TKwabstract)) /*cast nullable TKwabstract*/;
-  /* ./parser//parser.nit:5154 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5154);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
-  /* ./parser//parser.nit:5156 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5156);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAbstractClasskind_parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(6);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5162 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction80___init(val_t p0, int* init_table){
-  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction80].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5164;
-  fra.me.meth = LOCATE_parser___ReduceAction80___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5164 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos84] = 1;
-  return;
-}
-void parser___ReduceAction81___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 = 5168;
-  fra.me.meth = LOCATE_parser___ReduceAction81___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwinterface, ID_TKwinterface)) /*cast nullable TKwinterface*/;
-  /* ./parser//parser.nit:5173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5173);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInterfaceClasskind_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(6);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5178 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction81___init(val_t p0, int* init_table){
-  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction81].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos85]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5180;
-  fra.me.meth = LOCATE_parser___ReduceAction81___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5180 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos85] = 1;
-  return;
-}
-void parser___ReduceAction82___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 = 5184;
-  fra.me.meth = LOCATE_parser___ReduceAction82___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwuniversal, ID_TKwuniversal)) /*cast nullable TKwuniversal*/;
-  /* ./parser//parser.nit:5189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5189);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AUniversalClasskind_parser_prod___AUniversalClasskind___init_auniversalclasskind(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(6);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5194 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction82___init(val_t p0, int* init_table){
-  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction82].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5196;
-  fra.me.meth = LOCATE_parser___ReduceAction82___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5196 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos86] = 1;
-  return;
-}
-void parser___ReduceAction83___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5200;
-  fra.me.meth = LOCATE_parser___ReduceAction83___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast nullable AFormaldef*/;
-  /* ./parser//parser.nit:5210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5210);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:5211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:5212 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(7);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5215 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction83___init(val_t p0, int* init_table){
-  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction83].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos87]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5217;
-  fra.me.meth = LOCATE_parser___ReduceAction83___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5217 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos87] = 1;
-  return;
-}
-void parser___ReduceAction84___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 = 5221;
-  fra.me.meth = LOCATE_parser___ReduceAction84___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AFormaldef, ID_AFormaldef)) /*cast nullable AFormaldef*/;
-  /* ./parser//parser.nit:5232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5232);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:5234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5234);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:5235 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:5236 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:5239 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:5240 */
-  } else {
-    /* ./parser//parser.nit:5242 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(7);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5246 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction84___init(val_t p0, int* init_table){
-  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction84].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5248;
-  fra.me.meth = LOCATE_parser___ReduceAction84___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5248 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos88] = 1;
-  return;
-}
-void parser___ReduceAction85___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 = 5252;
-  fra.me.meth = LOCATE_parser___ReduceAction85___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast nullable AFormaldef*/;
-  /* ./parser//parser.nit:5259 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5259);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(8);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5261 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction85___init(val_t p0, int* init_table){
-  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction85].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5263;
-  fra.me.meth = LOCATE_parser___ReduceAction85___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5263 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos89] = 1;
-  return;
-}
-void parser___ReduceAction86___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 = 5267;
-  fra.me.meth = LOCATE_parser___ReduceAction86___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:5272 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5272);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(9);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5278 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction86___init(val_t p0, int* init_table){
-  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction86].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5280;
-  fra.me.meth = LOCATE_parser___ReduceAction86___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5280 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos90] = 1;
-  return;
-}
-void parser___ReduceAction87___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 = 5284;
-  fra.me.meth = LOCATE_parser___ReduceAction87___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5290);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:5292 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5292);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(9);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5298 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction87___init(val_t p0, int* init_table){
-  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction87].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos91]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5300;
-  fra.me.meth = LOCATE_parser___ReduceAction87___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5300 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos91] = 1;
-  return;
-}
-void parser___ReduceAction88___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 = 5304;
-  fra.me.meth = LOCATE_parser___ReduceAction88___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwspecial, ID_TKwspecial)) /*cast nullable TKwspecial*/;
-  /* ./parser//parser.nit:5312 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5312);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:5314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5314);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(10);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5320 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction88___init(val_t p0, int* init_table){
-  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction88].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5322;
-  fra.me.meth = LOCATE_parser___ReduceAction88___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5322 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos92] = 1;
-  return;
-}
-void parser___ReduceAction89___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 = 5326;
-  fra.me.meth = LOCATE_parser___ReduceAction89___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:5332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5332);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(11);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5334 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction89___init(val_t p0, int* init_table){
-  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction89].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5336;
-  fra.me.meth = LOCATE_parser___ReduceAction89___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5336 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos93] = 1;
-  return;
-}
-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 = 5340;
-  fra.me.meth = LOCATE_parser___ReduceAction90___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5351 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5351);
-    nit_exit(1);
-  }
-  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:5353 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5353);
-    nit_exit(1);
-  }
-  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:5355 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5355);
-    nit_exit(1);
-  }
-  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:5357 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5357);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:5362 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5362);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5364);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5375 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction90___init(val_t p0, int* init_table){
-  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction90].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5377;
-  fra.me.meth = LOCATE_parser___ReduceAction90___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5377 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos94] = 1;
-  return;
-}
-void parser___ReduceAction91___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 = 5381;
-  fra.me.meth = LOCATE_parser___ReduceAction91___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5392 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5392);
-    nit_exit(1);
-  }
-  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:5394 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5394);
-    nit_exit(1);
-  }
-  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:5396 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5396);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:5398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5398);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:5403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5403);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5405 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5405);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5416 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction91___init(val_t p0, int* init_table){
-  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction91].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos95]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5418;
-  fra.me.meth = LOCATE_parser___ReduceAction91___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5418 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
-  return;
-}
-void parser___ReduceAction92___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 = 5422;
-  fra.me.meth = LOCATE_parser___ReduceAction92___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5433);
-    nit_exit(1);
-  }
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5435);
-    nit_exit(1);
-  }
-  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:5437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5437);
-    nit_exit(1);
-  }
-  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:5439 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5439);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:5444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5444);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5446);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5457 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction92___init(val_t p0, int* init_table){
-  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction92].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5459;
-  fra.me.meth = LOCATE_parser___ReduceAction92___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5459 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos96] = 1;
-  return;
-}
-void parser___ReduceAction93___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 = 5463;
-  fra.me.meth = LOCATE_parser___ReduceAction93___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5474 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5474);
-    nit_exit(1);
-  }
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5476);
-    nit_exit(1);
-  }
-  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:5478 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5478);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:5480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5480);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:5485 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5485);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5487 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5487);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5498 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction93___init(val_t p0, int* init_table){
-  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction93].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5500;
-  fra.me.meth = LOCATE_parser___ReduceAction93___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5500 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos97] = 1;
-  return;
-}
-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 = 5504;
-  fra.me.meth = LOCATE_parser___ReduceAction94___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5515 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5515);
-    nit_exit(1);
-  }
-  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:5517 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5517);
-    nit_exit(1);
-  }
-  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:5519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5519);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:5521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5521);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:5526 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5526);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5528);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5539 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction94___init(val_t p0, int* init_table){
-  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction94].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5541;
-  fra.me.meth = LOCATE_parser___ReduceAction94___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5541 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos98] = 1;
-  return;
-}
-void parser___ReduceAction95___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 = 5545;
-  fra.me.meth = LOCATE_parser___ReduceAction95___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5556 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5556);
-    nit_exit(1);
-  }
-  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:5558 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5558);
-    nit_exit(1);
-  }
-  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:5560 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5560);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:5562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5562);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:5567 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5567);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5569 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5569);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5580 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction95___init(val_t p0, int* init_table){
-  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction95].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos99]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5582;
-  fra.me.meth = LOCATE_parser___ReduceAction95___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5582 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos99] = 1;
-  return;
-}
-void parser___ReduceAction96___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 = 5586;
-  fra.me.meth = LOCATE_parser___ReduceAction96___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5597);
-    nit_exit(1);
-  }
-  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:5599 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5599);
-    nit_exit(1);
-  }
-  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:5601 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5601);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:5603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5603);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:5608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5608);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5610);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5621 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction96___init(val_t p0, int* init_table){
-  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction96].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5623;
-  fra.me.meth = LOCATE_parser___ReduceAction96___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5623 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos100] = 1;
-  return;
-}
-void parser___ReduceAction97___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 = 5627;
-  fra.me.meth = LOCATE_parser___ReduceAction97___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5638);
-    nit_exit(1);
-  }
-  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:5640 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5640);
-    nit_exit(1);
-  }
-  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:5642 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5642);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:5644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5644);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:5649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5649);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5651);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5662 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction97___init(val_t p0, int* init_table){
-  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction97].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos101]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5664;
-  fra.me.meth = LOCATE_parser___ReduceAction97___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5664 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos101] = 1;
-  return;
-}
-void parser___ReduceAction98___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 = 5668;
-  fra.me.meth = LOCATE_parser___ReduceAction98___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5679);
-    nit_exit(1);
-  }
-  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:5681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5681);
-    nit_exit(1);
-  }
-  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:5683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5683);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:5685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5685);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:5690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5690);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5692);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5703 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction98___init(val_t p0, int* init_table){
-  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction98].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5705;
-  fra.me.meth = LOCATE_parser___ReduceAction98___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5705 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos102] = 1;
-  return;
-}
-void parser___ReduceAction99___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 = 5709;
-  fra.me.meth = LOCATE_parser___ReduceAction99___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5720);
-    nit_exit(1);
-  }
-  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:5722 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5722);
-    nit_exit(1);
-  }
-  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:5724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5724);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:5726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5726);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:5731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5731);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5733 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5733);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5744 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction99___init(val_t p0, int* init_table){
-  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction99].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos103]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5746;
-  fra.me.meth = LOCATE_parser___ReduceAction99___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5746 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos103] = 1;
-  return;
-}
-void parser___ReduceAction100___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 = 5750;
-  fra.me.meth = LOCATE_parser___ReduceAction100___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5761 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5761);
-    nit_exit(1);
-  }
-  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:5763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5763);
-    nit_exit(1);
-  }
-  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:5765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5765);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:5767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5767);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:5772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5772);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5774 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5774);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5785 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction100___init(val_t p0, int* init_table){
-  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction100].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5787;
-  fra.me.meth = LOCATE_parser___ReduceAction100___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5787 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos104] = 1;
-  return;
-}
-void parser___ReduceAction101___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 = 5791;
-  fra.me.meth = LOCATE_parser___ReduceAction101___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5802 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5802);
-    nit_exit(1);
-  }
-  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:5804 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5804);
-    nit_exit(1);
-  }
-  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:5806 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5806);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:5808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5808);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:5813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5813);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5815);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5826 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction101___init(val_t p0, int* init_table){
-  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction101].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5828;
-  fra.me.meth = LOCATE_parser___ReduceAction101___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5828 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos105] = 1;
-  return;
-}
-void parser___ReduceAction102___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 = 5832;
-  fra.me.meth = LOCATE_parser___ReduceAction102___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5844);
-    nit_exit(1);
-  }
-  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 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5846);
-    nit_exit(1);
-  }
-  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:5848 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5848);
-    nit_exit(1);
-  }
-  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:5850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5850);
-    nit_exit(1);
-  }
-  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:5852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5852);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:5858 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5858);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5860 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5860);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5871 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction102___init(val_t p0, int* init_table){
-  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction102].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5873;
-  fra.me.meth = LOCATE_parser___ReduceAction102___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5873 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos106] = 1;
-  return;
-}
-void parser___ReduceAction103___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 = 5877;
-  fra.me.meth = LOCATE_parser___ReduceAction103___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5888);
-    nit_exit(1);
-  }
-  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:5890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5890);
-    nit_exit(1);
-  }
-  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:5892 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5892);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:5894 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5894);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:5899 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5899);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5901);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5912 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction103___init(val_t p0, int* init_table){
-  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction103].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5914;
-  fra.me.meth = LOCATE_parser___ReduceAction103___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5914 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos107] = 1;
-  return;
-}
-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 = 5918;
-  fra.me.meth = LOCATE_parser___ReduceAction104___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5930);
-    nit_exit(1);
-  }
-  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:5932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5932);
-    nit_exit(1);
-  }
-  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:5934 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5934);
-    nit_exit(1);
-  }
-  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:5936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5936);
-    nit_exit(1);
-  }
-  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:5938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5938);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:5944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5944);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5946 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5946);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:5957 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction104___init(val_t p0, int* init_table){
-  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction104].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 5959;
-  fra.me.meth = LOCATE_parser___ReduceAction104___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:5959 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos108] = 1;
-  return;
-}
-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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5963;
-  fra.me.meth = LOCATE_parser___ReduceAction105___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:5976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5976);
-    nit_exit(1);
-  }
-  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:5978 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5978);
-    nit_exit(1);
-  }
-  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:5980 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5980);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:5982 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5982);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:5984 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5984);
-    nit_exit(1);
-  }
-  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:5986 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5986);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:5993 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5993);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:5995 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 5995);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6006 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction105___init(val_t p0, int* init_table){
-  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction105].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos109]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6008;
-  fra.me.meth = LOCATE_parser___ReduceAction105___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6008 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos109] = 1;
-  return;
-}
-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 = 6012;
-  fra.me.meth = LOCATE_parser___ReduceAction106___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6024);
-    nit_exit(1);
-  }
-  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:6026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6026);
-    nit_exit(1);
-  }
-  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:6028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6028);
-    nit_exit(1);
-  }
-  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:6030 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6030);
-    nit_exit(1);
-  }
-  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:6032 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6032);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:6037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6037);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6039);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6050 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction106___init(val_t p0, int* init_table){
-  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction106].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6052;
-  fra.me.meth = LOCATE_parser___ReduceAction106___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6052 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos110] = 1;
-  return;
-}
-void parser___ReduceAction107___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 = 6056;
-  fra.me.meth = LOCATE_parser___ReduceAction107___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6068);
-    nit_exit(1);
-  }
-  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:6070 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6070);
-    nit_exit(1);
-  }
-  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:6072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6072);
-    nit_exit(1);
-  }
-  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:6074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6074);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:6076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6076);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:6081 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6081);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6083 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6083);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6094 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction107___init(val_t p0, int* init_table){
-  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction107].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos111]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6096;
-  fra.me.meth = LOCATE_parser___ReduceAction107___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6096 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos111] = 1;
-  return;
-}
-void parser___ReduceAction108___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 = 6100;
-  fra.me.meth = LOCATE_parser___ReduceAction108___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6112 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6112);
-    nit_exit(1);
-  }
-  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:6114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6114);
-    nit_exit(1);
-  }
-  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:6116 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6116);
-    nit_exit(1);
-  }
-  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:6118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6118);
-    nit_exit(1);
-  }
-  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:6120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6120);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:6125 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6125);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6127 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6127);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6138 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction108___init(val_t p0, int* init_table){
-  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction108].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6140;
-  fra.me.meth = LOCATE_parser___ReduceAction108___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6140 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos112] = 1;
-  return;
-}
-void parser___ReduceAction109___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 = 6144;
-  fra.me.meth = LOCATE_parser___ReduceAction109___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6156 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6156);
-    nit_exit(1);
-  }
-  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:6158 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6158);
-    nit_exit(1);
-  }
-  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:6160 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6160);
-    nit_exit(1);
-  }
-  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:6162 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6162);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:6164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6164);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:6169 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6169);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6171 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6171);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6182 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction109___init(val_t p0, int* init_table){
-  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction109].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos113]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6184;
-  fra.me.meth = LOCATE_parser___ReduceAction109___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6184 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos113] = 1;
-  return;
-}
-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 = 6188;
-  fra.me.meth = LOCATE_parser___ReduceAction110___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6200);
-    nit_exit(1);
-  }
-  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:6202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6202);
-    nit_exit(1);
-  }
-  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:6204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6204);
-    nit_exit(1);
-  }
-  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:6206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6206);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:6208 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6208);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:6213 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6213);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6215 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6215);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6226 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction110___init(val_t p0, int* init_table){
-  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction110].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6228;
-  fra.me.meth = LOCATE_parser___ReduceAction110___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6228 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos114] = 1;
-  return;
-}
-void parser___ReduceAction111___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 = 6232;
-  fra.me.meth = LOCATE_parser___ReduceAction111___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6244);
-    nit_exit(1);
-  }
-  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:6246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6246);
-    nit_exit(1);
-  }
-  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:6248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6248);
-    nit_exit(1);
-  }
-  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:6250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6250);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:6252 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6252);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:6257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6257);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6259 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6259);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6270 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction111___init(val_t p0, int* init_table){
-  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction111].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos115]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6272;
-  fra.me.meth = LOCATE_parser___ReduceAction111___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6272 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos115] = 1;
-  return;
-}
-void parser___ReduceAction112___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 = 6276;
-  fra.me.meth = LOCATE_parser___ReduceAction112___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6288);
-    nit_exit(1);
-  }
-  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:6290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6290);
-    nit_exit(1);
-  }
-  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:6292 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6292);
-    nit_exit(1);
-  }
-  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:6294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6294);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:6296 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6296);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:6301 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6301);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6303 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6303);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6314 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction112___init(val_t p0, int* init_table){
-  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction112].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6316;
-  fra.me.meth = LOCATE_parser___ReduceAction112___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6316 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos116] = 1;
-  return;
-}
-void parser___ReduceAction113___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 = 6320;
-  fra.me.meth = LOCATE_parser___ReduceAction113___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6332);
-    nit_exit(1);
-  }
-  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:6334 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6334);
-    nit_exit(1);
-  }
-  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:6336 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6336);
-    nit_exit(1);
-  }
-  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:6338 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6338);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:6340 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6340);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:6345 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6345);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6347 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6347);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6358 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction113___init(val_t p0, int* init_table){
-  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction113].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6360;
-  fra.me.meth = LOCATE_parser___ReduceAction113___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6360 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos117] = 1;
-  return;
-}
-void parser___ReduceAction114___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 = 6364;
-  fra.me.meth = LOCATE_parser___ReduceAction114___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6376);
-    nit_exit(1);
-  }
-  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:6378 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6378);
-    nit_exit(1);
-  }
-  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:6380 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6380);
-    nit_exit(1);
-  }
-  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:6382 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6382);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:6384 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6384);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:6389 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6389);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6391);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6402 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction114___init(val_t p0, int* init_table){
-  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction114].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6404;
-  fra.me.meth = LOCATE_parser___ReduceAction114___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6404 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos118] = 1;
-  return;
-}
-void parser___ReduceAction115___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 = 6408;
-  fra.me.meth = LOCATE_parser___ReduceAction115___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6420);
-    nit_exit(1);
-  }
-  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:6422 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6422);
-    nit_exit(1);
-  }
-  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:6424 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6424);
-    nit_exit(1);
-  }
-  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:6426 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6426);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:6428 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6428);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:6433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6433);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6435);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6446 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction115___init(val_t p0, int* init_table){
-  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction115].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos119]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6448;
-  fra.me.meth = LOCATE_parser___ReduceAction115___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6448 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos119] = 1;
-  return;
-}
-void parser___ReduceAction116___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 = 6452;
-  fra.me.meth = LOCATE_parser___ReduceAction116___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6464 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6464);
-    nit_exit(1);
-  }
-  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:6466 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6466);
-    nit_exit(1);
-  }
-  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:6468 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6468);
-    nit_exit(1);
-  }
-  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:6470 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6470);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:6472 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6472);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:6477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6477);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6479 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6479);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6490 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction116___init(val_t p0, int* init_table){
-  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction116].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6492;
-  fra.me.meth = LOCATE_parser___ReduceAction116___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6492 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos120] = 1;
-  return;
-}
-void parser___ReduceAction117___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 = 6496;
-  fra.me.meth = LOCATE_parser___ReduceAction117___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6508 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6508);
-    nit_exit(1);
-  }
-  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:6510 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6510);
-    nit_exit(1);
-  }
-  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:6512 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6512);
-    nit_exit(1);
-  }
-  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:6514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6514);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:6516 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6516);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:6521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6521);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6523);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6534 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction117___init(val_t p0, int* init_table){
-  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction117].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos121]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6536;
-  fra.me.meth = LOCATE_parser___ReduceAction117___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6536 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos121] = 1;
-  return;
-}
-void parser___ReduceAction118___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 = 6540;
-  fra.me.meth = LOCATE_parser___ReduceAction118___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6553);
-    nit_exit(1);
-  }
-  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:6555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6555);
-    nit_exit(1);
-  }
-  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:6557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6557);
-    nit_exit(1);
-  }
-  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:6559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6559);
-    nit_exit(1);
-  }
-  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:6561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6561);
-    nit_exit(1);
-  }
-  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:6563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6563);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:6569 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6569);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6571 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6571);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6582 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction118___init(val_t p0, int* init_table){
-  int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction118].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6584;
-  fra.me.meth = LOCATE_parser___ReduceAction118___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6584 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos122] = 1;
-  return;
-}
-void parser___ReduceAction119___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 = 6588;
-  fra.me.meth = LOCATE_parser___ReduceAction119___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6600);
-    nit_exit(1);
-  }
-  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:6602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6602);
-    nit_exit(1);
-  }
-  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:6604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6604);
-    nit_exit(1);
-  }
-  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:6606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6606);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:6608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6608);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:6613 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6613);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6615 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6615);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6626 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction119___init(val_t p0, int* init_table){
-  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction119].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos123]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6628;
-  fra.me.meth = LOCATE_parser___ReduceAction119___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6628 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos123] = 1;
-  return;
-}
-void parser___ReduceAction120___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 = 6632;
-  fra.me.meth = LOCATE_parser___ReduceAction120___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6645 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6645);
-    nit_exit(1);
-  }
-  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:6647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6647);
-    nit_exit(1);
-  }
-  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:6649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6649);
-    nit_exit(1);
-  }
-  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:6651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6651);
-    nit_exit(1);
-  }
-  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:6653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6653);
-    nit_exit(1);
-  }
-  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:6655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6655);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:6661 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6661);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6663 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6663);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6674 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction120___init(val_t p0, int* init_table){
-  int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction120].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6676;
-  fra.me.meth = LOCATE_parser___ReduceAction120___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6676 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos124] = 1;
-  return;
-}
-void parser___ReduceAction121___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 = 6680;
-  fra.me.meth = LOCATE_parser___ReduceAction121___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6694);
-    nit_exit(1);
-  }
-  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:6696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6696);
-    nit_exit(1);
-  }
-  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:6698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6698);
-    nit_exit(1);
-  }
-  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:6700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6700);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:6702 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6702);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:6704 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6704);
-    nit_exit(1);
-  }
-  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:6706 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6706);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:6713 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6713);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6715 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6715);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6726 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction121___init(val_t p0, int* init_table){
-  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction121].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6728;
-  fra.me.meth = LOCATE_parser___ReduceAction121___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6728 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos125] = 1;
-  return;
-}
-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 = 6732;
-  fra.me.meth = LOCATE_parser___ReduceAction122___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6744);
-    nit_exit(1);
-  }
-  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:6746 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6746);
-    nit_exit(1);
-  }
-  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:6748 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6748);
-    nit_exit(1);
-  }
-  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:6750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6750);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:6755 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6755);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6757 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6757);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6768 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction122___init(val_t p0, int* init_table){
-  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction122].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6770;
-  fra.me.meth = LOCATE_parser___ReduceAction122___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6770 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos126] = 1;
-  return;
-}
-void parser___ReduceAction123___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 = 6774;
-  fra.me.meth = LOCATE_parser___ReduceAction123___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6786 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6786);
-    nit_exit(1);
-  }
-  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:6788 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6788);
-    nit_exit(1);
-  }
-  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:6790 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6790);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:6792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6792);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:6797 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6797);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6799 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6799);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6810 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction123___init(val_t p0, int* init_table){
-  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction123].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos127]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6812;
-  fra.me.meth = LOCATE_parser___ReduceAction123___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6812 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos127] = 1;
-  return;
-}
-void parser___ReduceAction124___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 = 6816;
-  fra.me.meth = LOCATE_parser___ReduceAction124___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6828 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6828);
-    nit_exit(1);
-  }
-  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:6830 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6830);
-    nit_exit(1);
-  }
-  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:6832 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6832);
-    nit_exit(1);
-  }
-  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:6834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6834);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:6839 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6839);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6841 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6841);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6852 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction124___init(val_t p0, int* init_table){
-  int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction124].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6854;
-  fra.me.meth = LOCATE_parser___ReduceAction124___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6854 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos128] = 1;
-  return;
-}
-void parser___ReduceAction125___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 = 6858;
-  fra.me.meth = LOCATE_parser___ReduceAction125___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6870);
-    nit_exit(1);
-  }
-  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:6872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6872);
-    nit_exit(1);
-  }
-  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:6874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6874);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:6876 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6876);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:6881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6881);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6883 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6883);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6894 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction125___init(val_t p0, int* init_table){
-  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction125].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos129]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6896;
-  fra.me.meth = LOCATE_parser___ReduceAction125___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6896 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos129] = 1;
-  return;
-}
-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 = 6900;
-  fra.me.meth = LOCATE_parser___ReduceAction126___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6912);
-    nit_exit(1);
-  }
-  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:6914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6914);
-    nit_exit(1);
-  }
-  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:6916 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6916);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:6918 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6918);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:6923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6923);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6925);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6936 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction126___init(val_t p0, int* init_table){
-  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction126].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6938;
-  fra.me.meth = LOCATE_parser___ReduceAction126___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6938 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos130] = 1;
-  return;
-}
-void parser___ReduceAction127___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 = 6942;
-  fra.me.meth = LOCATE_parser___ReduceAction127___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6954);
-    nit_exit(1);
-  }
-  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:6956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6956);
-    nit_exit(1);
-  }
-  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:6958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6958);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:6960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6960);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:6965 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6965);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:6967 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6967);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:6978 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction127___init(val_t p0, int* init_table){
-  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction127].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 6980;
-  fra.me.meth = LOCATE_parser___ReduceAction127___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:6980 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos131] = 1;
-  return;
-}
-void parser___ReduceAction128___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 = 6984;
-  fra.me.meth = LOCATE_parser___ReduceAction128___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:6996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6996);
-    nit_exit(1);
-  }
-  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:6998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 6998);
-    nit_exit(1);
-  }
-  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:7000 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7000);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:7002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7002);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:7007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7007);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7009);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7020 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction128___init(val_t p0, int* init_table){
-  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction128].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7022;
-  fra.me.meth = LOCATE_parser___ReduceAction128___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7022 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos132] = 1;
-  return;
-}
-void parser___ReduceAction129___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 = 7026;
-  fra.me.meth = LOCATE_parser___ReduceAction129___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7038 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7038);
-    nit_exit(1);
-  }
-  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:7040 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7040);
-    nit_exit(1);
-  }
-  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:7042 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7042);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:7044 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7044);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:7049 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7049);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7051 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7051);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7062 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction129___init(val_t p0, int* init_table){
-  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction129].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7064;
-  fra.me.meth = LOCATE_parser___ReduceAction129___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7064 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos133] = 1;
-  return;
-}
-void parser___ReduceAction130___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 = 7068;
-  fra.me.meth = LOCATE_parser___ReduceAction130___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7080);
-    nit_exit(1);
-  }
-  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:7082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7082);
-    nit_exit(1);
-  }
-  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:7084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7084);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:7086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7086);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:7091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7091);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7093);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7104 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction130___init(val_t p0, int* init_table){
-  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction130].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7106;
-  fra.me.meth = LOCATE_parser___ReduceAction130___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7106 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos134] = 1;
-  return;
-}
-void parser___ReduceAction131___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 = 7110;
-  fra.me.meth = LOCATE_parser___ReduceAction131___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7122 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7122);
-    nit_exit(1);
-  }
-  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:7124 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7124);
-    nit_exit(1);
-  }
-  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:7126 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7126);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:7128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7128);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:7133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7133);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7135);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7146 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction131___init(val_t p0, int* init_table){
-  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction131].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos135]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7148;
-  fra.me.meth = LOCATE_parser___ReduceAction131___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7148 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos135] = 1;
-  return;
-}
-void parser___ReduceAction132___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 = 7152;
-  fra.me.meth = LOCATE_parser___ReduceAction132___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7164);
-    nit_exit(1);
-  }
-  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:7166 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7166);
-    nit_exit(1);
-  }
-  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:7168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7168);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:7170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7170);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:7175 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7175);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7177 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7177);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7188 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction132___init(val_t p0, int* init_table){
-  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction132].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7190;
-  fra.me.meth = LOCATE_parser___ReduceAction132___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7190 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos136] = 1;
-  return;
-}
-void parser___ReduceAction133___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 = 7194;
-  fra.me.meth = LOCATE_parser___ReduceAction133___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7206);
-    nit_exit(1);
-  }
-  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:7208 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7208);
-    nit_exit(1);
-  }
-  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:7210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7210);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:7212 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7212);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:7217 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7217);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7219 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7219);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7230 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction133___init(val_t p0, int* init_table){
-  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction133].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7232;
-  fra.me.meth = LOCATE_parser___ReduceAction133___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7232 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos137] = 1;
-  return;
-}
-void parser___ReduceAction134___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 = 7236;
-  fra.me.meth = LOCATE_parser___ReduceAction134___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7249 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7249);
-    nit_exit(1);
-  }
-  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:7251 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7251);
-    nit_exit(1);
-  }
-  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:7253 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7253);
-    nit_exit(1);
-  }
-  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:7255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7255);
-    nit_exit(1);
-  }
-  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:7257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7257);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:7263 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7263);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7265 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7265);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7276 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction134___init(val_t p0, int* init_table){
-  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction134].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7278;
-  fra.me.meth = LOCATE_parser___ReduceAction134___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7278 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos138] = 1;
-  return;
-}
-void parser___ReduceAction135___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 = 7282;
-  fra.me.meth = LOCATE_parser___ReduceAction135___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7294);
-    nit_exit(1);
-  }
-  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:7296 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7296);
-    nit_exit(1);
-  }
-  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:7298 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7298);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:7300 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7300);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:7305 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7305);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7307);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7318 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction135___init(val_t p0, int* init_table){
-  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction135].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7320;
-  fra.me.meth = LOCATE_parser___ReduceAction135___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7320 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos139] = 1;
-  return;
-}
-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 = 7324;
-  fra.me.meth = LOCATE_parser___ReduceAction136___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7337);
-    nit_exit(1);
-  }
-  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:7339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7339);
-    nit_exit(1);
-  }
-  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:7341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7341);
-    nit_exit(1);
-  }
-  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:7343 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7343);
-    nit_exit(1);
-  }
-  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:7345 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7345);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:7351 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7351);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7353 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7353);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7364 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction136___init(val_t p0, int* init_table){
-  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction136].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7366;
-  fra.me.meth = LOCATE_parser___ReduceAction136___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7366 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos140] = 1;
-  return;
-}
-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 = 7370;
-  fra.me.meth = LOCATE_parser___ReduceAction137___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7384 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7384);
-    nit_exit(1);
-  }
-  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:7386 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7386);
-    nit_exit(1);
-  }
-  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:7388 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7388);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:7390 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7390);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:7392 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7392);
-    nit_exit(1);
-  }
-  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:7394 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7394);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:7401 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7401);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7403);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7414 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction137___init(val_t p0, int* init_table){
-  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction137].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7416;
-  fra.me.meth = LOCATE_parser___ReduceAction137___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7416 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos141] = 1;
-  return;
-}
-void parser___ReduceAction138___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 = 7420;
-  fra.me.meth = LOCATE_parser___ReduceAction138___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7433);
-    nit_exit(1);
-  }
-  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:7435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7435);
-    nit_exit(1);
-  }
-  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:7437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7437);
-    nit_exit(1);
-  }
-  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:7439 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7439);
-    nit_exit(1);
-  }
-  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:7441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7441);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:7446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7446);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7448 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7448);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7459 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction138___init(val_t p0, int* init_table){
-  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction138].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7461;
-  fra.me.meth = LOCATE_parser___ReduceAction138___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7461 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos142] = 1;
-  return;
-}
-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 = 7465;
-  fra.me.meth = LOCATE_parser___ReduceAction139___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7478 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7478);
-    nit_exit(1);
-  }
-  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:7480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7480);
-    nit_exit(1);
-  }
-  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:7482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7482);
-    nit_exit(1);
-  }
-  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:7484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7484);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:7486 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7486);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:7491 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7491);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7493 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7493);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7504 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction139___init(val_t p0, int* init_table){
-  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction139].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7506;
-  fra.me.meth = LOCATE_parser___ReduceAction139___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7506 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos143] = 1;
-  return;
-}
-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 = 7510;
-  fra.me.meth = LOCATE_parser___ReduceAction140___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7523);
-    nit_exit(1);
-  }
-  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:7525 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7525);
-    nit_exit(1);
-  }
-  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:7527 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7527);
-    nit_exit(1);
-  }
-  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:7529 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7529);
-    nit_exit(1);
-  }
-  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:7531 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7531);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:7536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7536);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7538);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7549 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction140___init(val_t p0, int* init_table){
-  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction140].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7551;
-  fra.me.meth = LOCATE_parser___ReduceAction140___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7551 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos144] = 1;
-  return;
-}
-void parser___ReduceAction141___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 = 7555;
-  fra.me.meth = LOCATE_parser___ReduceAction141___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7568);
-    nit_exit(1);
-  }
-  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:7570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7570);
-    nit_exit(1);
-  }
-  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:7572 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7572);
-    nit_exit(1);
-  }
-  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:7574 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7574);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:7576 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7576);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:7581 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7581);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7583 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7583);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7594 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction141___init(val_t p0, int* init_table){
-  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction141].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7596;
-  fra.me.meth = LOCATE_parser___ReduceAction141___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7596 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos145] = 1;
-  return;
-}
-void parser___ReduceAction142___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 = 7600;
-  fra.me.meth = LOCATE_parser___ReduceAction142___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7613 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7613);
-    nit_exit(1);
-  }
-  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:7615 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7615);
-    nit_exit(1);
-  }
-  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:7617 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7617);
-    nit_exit(1);
-  }
-  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:7619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7619);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:7621 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7621);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:7626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7626);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7628 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7628);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7639 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction142___init(val_t p0, int* init_table){
-  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction142].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7641;
-  fra.me.meth = LOCATE_parser___ReduceAction142___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7641 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos146] = 1;
-  return;
-}
-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 = 7645;
-  fra.me.meth = LOCATE_parser___ReduceAction143___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7658 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7658);
-    nit_exit(1);
-  }
-  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:7660 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7660);
-    nit_exit(1);
-  }
-  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:7662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7662);
-    nit_exit(1);
-  }
-  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:7664 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7664);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:7666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7666);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:7671 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7671);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7673 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7673);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7684 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction143___init(val_t p0, int* init_table){
-  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction143].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7686;
-  fra.me.meth = LOCATE_parser___ReduceAction143___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7686 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos147] = 1;
-  return;
-}
-void parser___ReduceAction144___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 = 7690;
-  fra.me.meth = LOCATE_parser___ReduceAction144___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7703);
-    nit_exit(1);
-  }
-  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:7705 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7705);
-    nit_exit(1);
-  }
-  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:7707 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7707);
-    nit_exit(1);
-  }
-  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:7709 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7709);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:7711 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7711);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:7716 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7716);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7718);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7729 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction144___init(val_t p0, int* init_table){
-  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction144].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7731;
-  fra.me.meth = LOCATE_parser___ReduceAction144___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7731 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos148] = 1;
-  return;
-}
-void parser___ReduceAction145___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 = 7735;
-  fra.me.meth = LOCATE_parser___ReduceAction145___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7748 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7748);
-    nit_exit(1);
-  }
-  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:7750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7750);
-    nit_exit(1);
-  }
-  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:7752 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7752);
-    nit_exit(1);
-  }
-  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:7754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7754);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:7756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7756);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:7761 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7761);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7763);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7774 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction145___init(val_t p0, int* init_table){
-  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction145].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7776;
-  fra.me.meth = LOCATE_parser___ReduceAction145___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7776 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos149] = 1;
-  return;
-}
-void parser___ReduceAction146___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 = 7780;
-  fra.me.meth = LOCATE_parser___ReduceAction146___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7793 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7793);
-    nit_exit(1);
-  }
-  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:7795 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7795);
-    nit_exit(1);
-  }
-  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:7797 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7797);
-    nit_exit(1);
-  }
-  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:7799 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7799);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:7801 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7801);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:7806 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7806);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7808);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7819 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction146___init(val_t p0, int* init_table){
-  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction146].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7821;
-  fra.me.meth = LOCATE_parser___ReduceAction146___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7821 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos150] = 1;
-  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 = 7825;
-  fra.me.meth = LOCATE_parser___ReduceAction147___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7838 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7838);
-    nit_exit(1);
-  }
-  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:7840 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7840);
-    nit_exit(1);
-  }
-  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:7842 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7842);
-    nit_exit(1);
-  }
-  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:7844 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7844);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:7846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7846);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:7851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7851);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7853);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7864 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction147___init(val_t p0, int* init_table){
-  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction147].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7866;
-  fra.me.meth = LOCATE_parser___ReduceAction147___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7866 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos151] = 1;
-  return;
-}
-void parser___ReduceAction148___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 = 7870;
-  fra.me.meth = LOCATE_parser___ReduceAction148___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7883 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7883);
-    nit_exit(1);
-  }
-  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:7885 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7885);
-    nit_exit(1);
-  }
-  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:7887 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7887);
-    nit_exit(1);
-  }
-  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:7889 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7889);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:7891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7891);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:7896 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7896);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7898 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7898);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7909 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction148___init(val_t p0, int* init_table){
-  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction148].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7911;
-  fra.me.meth = LOCATE_parser___ReduceAction148___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7911 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos152] = 1;
-  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 = 7915;
-  fra.me.meth = LOCATE_parser___ReduceAction149___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7928 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7928);
-    nit_exit(1);
-  }
-  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:7930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7930);
-    nit_exit(1);
-  }
-  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:7932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7932);
-    nit_exit(1);
-  }
-  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:7934 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7934);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:7936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7936);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:7941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7941);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7943);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:7954 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction149___init(val_t p0, int* init_table){
-  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction149].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 7956;
-  fra.me.meth = LOCATE_parser___ReduceAction149___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:7956 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos153] = 1;
-  return;
-}
-void parser___ReduceAction150___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 = 7960;
-  fra.me.meth = LOCATE_parser___ReduceAction150___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:7974 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7974);
-    nit_exit(1);
-  }
-  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:7976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7976);
-    nit_exit(1);
-  }
-  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:7978 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7978);
-    nit_exit(1);
-  }
-  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:7980 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7980);
-    nit_exit(1);
-  }
-  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:7982 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7982);
-    nit_exit(1);
-  }
-  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:7984 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7984);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:7990 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7990);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:7992 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 7992);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8003 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction150___init(val_t p0, int* init_table){
-  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction150].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8005;
-  fra.me.meth = LOCATE_parser___ReduceAction150___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8005 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos154] = 1;
-  return;
-}
-void parser___ReduceAction151___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 = 8009;
-  fra.me.meth = LOCATE_parser___ReduceAction151___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8022 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8022);
-    nit_exit(1);
-  }
-  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:8024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8024);
-    nit_exit(1);
-  }
-  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:8026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8026);
-    nit_exit(1);
-  }
-  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:8028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8028);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:8030 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8030);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:8035 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8035);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8037);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8048 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction151___init(val_t p0, int* init_table){
-  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction151].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8050;
-  fra.me.meth = LOCATE_parser___ReduceAction151___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8050 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos155] = 1;
-  return;
-}
-void parser___ReduceAction152___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 = 8054;
-  fra.me.meth = LOCATE_parser___ReduceAction152___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8068);
-    nit_exit(1);
-  }
-  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:8070 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8070);
-    nit_exit(1);
-  }
-  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:8072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8072);
-    nit_exit(1);
-  }
-  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:8074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8074);
-    nit_exit(1);
-  }
-  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:8076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8076);
-    nit_exit(1);
-  }
-  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:8078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8078);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:8084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8084);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8086);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8097 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction152___init(val_t p0, int* init_table){
-  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction152].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8099;
-  fra.me.meth = LOCATE_parser___ReduceAction152___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8099 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos156] = 1;
-  return;
-}
-void parser___ReduceAction153___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 = 8103;
-  fra.me.meth = LOCATE_parser___ReduceAction153___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8118);
-    nit_exit(1);
-  }
-  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:8120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8120);
-    nit_exit(1);
-  }
-  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:8122 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8122);
-    nit_exit(1);
-  }
-  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:8124 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8124);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:8126 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8126);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:8128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8128);
-    nit_exit(1);
-  }
-  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:8130 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8130);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:8137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8137);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8139 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8139);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8150 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction153___init(val_t p0, int* init_table){
-  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction153].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8152;
-  fra.me.meth = LOCATE_parser___ReduceAction153___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8152 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos157] = 1;
-  return;
-}
-void parser___ReduceAction154___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 = 8156;
-  fra.me.meth = LOCATE_parser___ReduceAction154___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8168);
-    nit_exit(1);
-  }
-  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:8170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8170);
-    nit_exit(1);
-  }
-  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:8172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8172);
-    nit_exit(1);
-  }
-  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:8174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8174);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:8179 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8179);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8181 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8181);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8192 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction154___init(val_t p0, int* init_table){
-  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction154].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8194;
-  fra.me.meth = LOCATE_parser___ReduceAction154___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8194 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos158] = 1;
-  return;
-}
-void parser___ReduceAction155___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 = 8198;
-  fra.me.meth = LOCATE_parser___ReduceAction155___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8210);
-    nit_exit(1);
-  }
-  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:8212 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8212);
-    nit_exit(1);
-  }
-  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:8214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8214);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:8216 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8216);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:8221 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8221);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8223 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8223);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8234 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction155___init(val_t p0, int* init_table){
-  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction155].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8236;
-  fra.me.meth = LOCATE_parser___ReduceAction155___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8236 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos159] = 1;
-  return;
-}
-void parser___ReduceAction156___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 = 8240;
-  fra.me.meth = LOCATE_parser___ReduceAction156___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8252 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8252);
-    nit_exit(1);
-  }
-  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:8254 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8254);
-    nit_exit(1);
-  }
-  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:8256 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8256);
-    nit_exit(1);
-  }
-  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:8258 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8258);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:8263 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8263);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8265 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8265);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8276 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction156___init(val_t p0, int* init_table){
-  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction156].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8278;
-  fra.me.meth = LOCATE_parser___ReduceAction156___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8278 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos160] = 1;
-  return;
-}
-void parser___ReduceAction157___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 = 8282;
-  fra.me.meth = LOCATE_parser___ReduceAction157___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8294);
-    nit_exit(1);
-  }
-  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:8296 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8296);
-    nit_exit(1);
-  }
-  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:8298 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8298);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:8300 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8300);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:8305 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8305);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8307);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8318 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction157___init(val_t p0, int* init_table){
-  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction157].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos161]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8320;
-  fra.me.meth = LOCATE_parser___ReduceAction157___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8320 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos161] = 1;
-  return;
-}
-void parser___ReduceAction158___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 = 8324;
-  fra.me.meth = LOCATE_parser___ReduceAction158___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8336 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8336);
-    nit_exit(1);
-  }
-  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:8338 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8338);
-    nit_exit(1);
-  }
-  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:8340 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8340);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:8342 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8342);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:8347 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8347);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8349 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8349);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8360 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction158___init(val_t p0, int* init_table){
-  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction158].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8362;
-  fra.me.meth = LOCATE_parser___ReduceAction158___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8362 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos162] = 1;
-  return;
-}
-void parser___ReduceAction159___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 = 8366;
-  fra.me.meth = LOCATE_parser___ReduceAction159___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8378 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8378);
-    nit_exit(1);
-  }
-  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:8380 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8380);
-    nit_exit(1);
-  }
-  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:8382 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8382);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:8384 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8384);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:8389 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8389);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8391);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8402 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction159___init(val_t p0, int* init_table){
-  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction159].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8404;
-  fra.me.meth = LOCATE_parser___ReduceAction159___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8404 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos163] = 1;
-  return;
-}
-void parser___ReduceAction160___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 = 8408;
-  fra.me.meth = LOCATE_parser___ReduceAction160___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8420);
-    nit_exit(1);
-  }
-  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:8422 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8422);
-    nit_exit(1);
-  }
-  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:8424 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8424);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:8426 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8426);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:8431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8431);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8433);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8444 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction160___init(val_t p0, int* init_table){
-  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction160].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8446;
-  fra.me.meth = LOCATE_parser___ReduceAction160___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8446 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos164] = 1;
-  return;
-}
-void parser___ReduceAction161___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 = 8450;
-  fra.me.meth = LOCATE_parser___ReduceAction161___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8462);
-    nit_exit(1);
-  }
-  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:8464 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8464);
-    nit_exit(1);
-  }
-  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:8466 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8466);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:8468 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8468);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:8473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8475);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8486 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction161___init(val_t p0, int* init_table){
-  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction161].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8488;
-  fra.me.meth = LOCATE_parser___ReduceAction161___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8488 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos165] = 1;
-  return;
-}
-void parser___ReduceAction162___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 = 8492;
-  fra.me.meth = LOCATE_parser___ReduceAction162___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8504);
-    nit_exit(1);
-  }
-  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:8506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8506);
-    nit_exit(1);
-  }
-  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:8508 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8508);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:8510 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8510);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:8515 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8515);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8517 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8517);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8528 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction162___init(val_t p0, int* init_table){
-  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction162].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8530;
-  fra.me.meth = LOCATE_parser___ReduceAction162___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8530 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos166] = 1;
-  return;
-}
-void parser___ReduceAction163___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 = 8534;
-  fra.me.meth = LOCATE_parser___ReduceAction163___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8546);
-    nit_exit(1);
-  }
-  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:8548 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8548);
-    nit_exit(1);
-  }
-  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:8550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8550);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:8552 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8552);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:8557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8557);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8559);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8570 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction163___init(val_t p0, int* init_table){
-  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction163].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8572;
-  fra.me.meth = LOCATE_parser___ReduceAction163___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8572 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos167] = 1;
-  return;
-}
-void parser___ReduceAction164___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 = 8576;
-  fra.me.meth = LOCATE_parser___ReduceAction164___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8588 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8588);
-    nit_exit(1);
-  }
-  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:8590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8590);
-    nit_exit(1);
-  }
-  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:8592 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8592);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:8594 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8594);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:8599 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8599);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8601 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8601);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8612 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction164___init(val_t p0, int* init_table){
-  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction164].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8614;
-  fra.me.meth = LOCATE_parser___ReduceAction164___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8614 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos168] = 1;
-  return;
-}
-void parser___ReduceAction165___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 = 8618;
-  fra.me.meth = LOCATE_parser___ReduceAction165___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8630);
-    nit_exit(1);
-  }
-  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:8632 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8632);
-    nit_exit(1);
-  }
-  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:8634 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8634);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:8636 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8636);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:8641 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8641);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8643 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8643);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8654 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction165___init(val_t p0, int* init_table){
-  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction165].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos169]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8656;
-  fra.me.meth = LOCATE_parser___ReduceAction165___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8656 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos169] = 1;
-  return;
-}
-void parser___ReduceAction166___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 = 8660;
-  fra.me.meth = LOCATE_parser___ReduceAction166___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8673 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8673);
-    nit_exit(1);
-  }
-  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:8675 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8675);
-    nit_exit(1);
-  }
-  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:8677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8677);
-    nit_exit(1);
-  }
-  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:8679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8679);
-    nit_exit(1);
-  }
-  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:8681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8681);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:8687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8687);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8689);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8700 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction166___init(val_t p0, int* init_table){
-  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction166].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8702;
-  fra.me.meth = LOCATE_parser___ReduceAction166___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8702 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos170] = 1;
-  return;
-}
-void parser___ReduceAction167___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 = 8706;
-  fra.me.meth = LOCATE_parser___ReduceAction167___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8718);
-    nit_exit(1);
-  }
-  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:8720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8720);
-    nit_exit(1);
-  }
-  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:8722 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8722);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:8724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8724);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:8729 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8729);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8731);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8742 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction167___init(val_t p0, int* init_table){
-  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction167].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8744;
-  fra.me.meth = LOCATE_parser___ReduceAction167___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8744 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos171] = 1;
-  return;
-}
-void parser___ReduceAction168___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 = 8748;
-  fra.me.meth = LOCATE_parser___ReduceAction168___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8761 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8761);
-    nit_exit(1);
-  }
-  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:8763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8763);
-    nit_exit(1);
-  }
-  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:8765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8765);
-    nit_exit(1);
-  }
-  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:8767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8767);
-    nit_exit(1);
-  }
-  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:8769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8769);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:8774 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8774);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8776 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8776);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8787 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction168___init(val_t p0, int* init_table){
-  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction168].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8789;
-  fra.me.meth = LOCATE_parser___ReduceAction168___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8789 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos172] = 1;
-  return;
-}
-void parser___ReduceAction169___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 = 8793;
-  fra.me.meth = LOCATE_parser___ReduceAction169___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8806 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8806);
-    nit_exit(1);
-  }
-  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:8808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8808);
-    nit_exit(1);
-  }
-  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:8810 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8810);
-    nit_exit(1);
-  }
-  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:8812 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8812);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:8814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8814);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:8819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8819);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8821);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8832 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction169___init(val_t p0, int* init_table){
-  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction169].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8834;
-  fra.me.meth = LOCATE_parser___ReduceAction169___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8834 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos173] = 1;
-  return;
-}
-void parser___ReduceAction170___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 = 8838;
-  fra.me.meth = LOCATE_parser___ReduceAction170___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8851);
-    nit_exit(1);
-  }
-  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:8853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8853);
-    nit_exit(1);
-  }
-  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:8855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8855);
-    nit_exit(1);
-  }
-  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:8857 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8857);
-    nit_exit(1);
-  }
-  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:8859 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8859);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:8864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8864);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8866);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8877 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction170___init(val_t p0, int* init_table){
-  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction170].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8879;
-  fra.me.meth = LOCATE_parser___ReduceAction170___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8879 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos174] = 1;
-  return;
-}
-void parser___ReduceAction171___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 = 8883;
-  fra.me.meth = LOCATE_parser___ReduceAction171___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8896 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8896);
-    nit_exit(1);
-  }
-  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:8898 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8898);
-    nit_exit(1);
-  }
-  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:8900 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8900);
-    nit_exit(1);
-  }
-  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:8902 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8902);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:8904 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8904);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:8909 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8909);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8911 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8911);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8922 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction171___init(val_t p0, int* init_table){
-  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction171].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos175]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8924;
-  fra.me.meth = LOCATE_parser___ReduceAction171___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8924 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos175] = 1;
-  return;
-}
-void parser___ReduceAction172___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 = 8928;
-  fra.me.meth = LOCATE_parser___ReduceAction172___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8941);
-    nit_exit(1);
-  }
-  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:8943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8943);
-    nit_exit(1);
-  }
-  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:8945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8945);
-    nit_exit(1);
-  }
-  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:8947 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8947);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:8949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8949);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:8954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8954);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:8956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8956);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:8967 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction172___init(val_t p0, int* init_table){
-  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction172].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 8969;
-  fra.me.meth = LOCATE_parser___ReduceAction172___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:8969 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos176] = 1;
-  return;
-}
-void parser___ReduceAction173___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 = 8973;
-  fra.me.meth = LOCATE_parser___ReduceAction173___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:8986 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8986);
-    nit_exit(1);
-  }
-  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:8988 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8988);
-    nit_exit(1);
-  }
-  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:8990 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8990);
-    nit_exit(1);
-  }
-  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:8992 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8992);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:8994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8994);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:8999 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 8999);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9001 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9001);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9012 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction173___init(val_t p0, int* init_table){
-  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction173].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos177]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9014;
-  fra.me.meth = LOCATE_parser___ReduceAction173___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9014 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos177] = 1;
-  return;
-}
-void parser___ReduceAction174___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 = 9018;
-  fra.me.meth = LOCATE_parser___ReduceAction174___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9031);
-    nit_exit(1);
-  }
-  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:9033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9033);
-    nit_exit(1);
-  }
-  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:9035 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9035);
-    nit_exit(1);
-  }
-  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:9037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9037);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:9039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9039);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:9044 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9044);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9046 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9046);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9057 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction174___init(val_t p0, int* init_table){
-  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction174].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9059;
-  fra.me.meth = LOCATE_parser___ReduceAction174___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9059 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos178] = 1;
-  return;
-}
-void parser___ReduceAction175___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 = 9063;
-  fra.me.meth = LOCATE_parser___ReduceAction175___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9076);
-    nit_exit(1);
-  }
-  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:9078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9078);
-    nit_exit(1);
-  }
-  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:9080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9080);
-    nit_exit(1);
-  }
-  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:9082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9082);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:9084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9084);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:9089 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9089);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9091);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9102 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction175___init(val_t p0, int* init_table){
-  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction175].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9104;
-  fra.me.meth = LOCATE_parser___ReduceAction175___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9104 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos179] = 1;
-  return;
-}
-void parser___ReduceAction176___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 = 9108;
-  fra.me.meth = LOCATE_parser___ReduceAction176___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9121);
-    nit_exit(1);
-  }
-  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:9123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9123);
-    nit_exit(1);
-  }
-  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:9125 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9125);
-    nit_exit(1);
-  }
-  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:9127 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9127);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:9129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9129);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:9134 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9134);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9136);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9147 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction176___init(val_t p0, int* init_table){
-  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction176].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9149;
-  fra.me.meth = LOCATE_parser___ReduceAction176___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9149 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos180] = 1;
-  return;
-}
-void parser___ReduceAction177___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 = 9153;
-  fra.me.meth = LOCATE_parser___ReduceAction177___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9166 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9166);
-    nit_exit(1);
-  }
-  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:9168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9168);
-    nit_exit(1);
-  }
-  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:9170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9170);
-    nit_exit(1);
-  }
-  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:9172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9172);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:9174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9174);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:9179 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9179);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9181 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9181);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9192 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction177___init(val_t p0, int* init_table){
-  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction177].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9194;
-  fra.me.meth = LOCATE_parser___ReduceAction177___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9194 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos181] = 1;
-  return;
-}
-void parser___ReduceAction178___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 = 9198;
-  fra.me.meth = LOCATE_parser___ReduceAction178___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9211);
-    nit_exit(1);
-  }
-  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:9213 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9213);
-    nit_exit(1);
-  }
-  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:9215 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9215);
-    nit_exit(1);
-  }
-  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:9217 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9217);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:9219 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9219);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:9224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9224);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9226);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9237 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction178___init(val_t p0, int* init_table){
-  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction178].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9239;
-  fra.me.meth = LOCATE_parser___ReduceAction178___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9239 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos182] = 1;
-  return;
-}
-void parser___ReduceAction179___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 = 9243;
-  fra.me.meth = LOCATE_parser___ReduceAction179___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9256 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9256);
-    nit_exit(1);
-  }
-  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:9258 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9258);
-    nit_exit(1);
-  }
-  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:9260 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9260);
-    nit_exit(1);
-  }
-  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:9262 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9262);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:9264 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9264);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:9269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9269);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9271 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9271);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9282 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction179___init(val_t p0, int* init_table){
-  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction179].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos183]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9284;
-  fra.me.meth = LOCATE_parser___ReduceAction179___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9284 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos183] = 1;
-  return;
-}
-void parser___ReduceAction180___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 = 9288;
-  fra.me.meth = LOCATE_parser___ReduceAction180___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9302 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9302);
-    nit_exit(1);
-  }
-  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:9304 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9304);
-    nit_exit(1);
-  }
-  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:9306 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9306);
-    nit_exit(1);
-  }
-  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:9308 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9308);
-    nit_exit(1);
-  }
-  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:9310 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9310);
-    nit_exit(1);
-  }
-  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:9312 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9312);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:9318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9318);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9320);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9331 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction180___init(val_t p0, int* init_table){
-  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction180].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9333;
-  fra.me.meth = LOCATE_parser___ReduceAction180___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9333 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos184] = 1;
-  return;
-}
-void parser___ReduceAction181___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 = 9337;
-  fra.me.meth = LOCATE_parser___ReduceAction181___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9350 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9350);
-    nit_exit(1);
-  }
-  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:9352 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9352);
-    nit_exit(1);
-  }
-  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:9354 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9354);
-    nit_exit(1);
-  }
-  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:9356 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9356);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:9358 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9358);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:9363 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9363);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:9365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9365);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9376 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction181___init(val_t p0, int* init_table){
-  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction181].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9378;
-  fra.me.meth = LOCATE_parser___ReduceAction181___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9378 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos185] = 1;
-  return;
-}
-void parser___ReduceAction182___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 = 9382;
-  fra.me.meth = LOCATE_parser___ReduceAction182___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9393 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9393);
-    nit_exit(1);
-  }
-  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:9395 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9395);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9397 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9397);
-    nit_exit(1);
-  }
-  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:9399 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9399);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9404);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9414 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction182___init(val_t p0, int* init_table){
-  int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction182].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9416;
-  fra.me.meth = LOCATE_parser___ReduceAction182___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9416 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos186] = 1;
-  return;
-}
-void parser___ReduceAction183___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 = 9420;
-  fra.me.meth = LOCATE_parser___ReduceAction183___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9431);
-    nit_exit(1);
-  }
-  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:9433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9433);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9435);
-    nit_exit(1);
-  }
-  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:9437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9437);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9442 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9442);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9452 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction183___init(val_t p0, int* init_table){
-  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction183].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9454;
-  fra.me.meth = LOCATE_parser___ReduceAction183___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9454 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos187] = 1;
-  return;
-}
-void parser___ReduceAction184___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 = 9458;
-  fra.me.meth = LOCATE_parser___ReduceAction184___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9469 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9469);
-    nit_exit(1);
-  }
-  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:9471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9471);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9473);
-    nit_exit(1);
-  }
-  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:9475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9475);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9480);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9490 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction184___init(val_t p0, int* init_table){
-  int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction184].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9492;
-  fra.me.meth = LOCATE_parser___ReduceAction184___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9492 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos188] = 1;
-  return;
-}
-void parser___ReduceAction185___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 = 9496;
-  fra.me.meth = LOCATE_parser___ReduceAction185___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9507 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9507);
-    nit_exit(1);
-  }
-  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:9509 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9509);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9511);
-    nit_exit(1);
-  }
-  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:9513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9513);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9518 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9518);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9528 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction185___init(val_t p0, int* init_table){
-  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction185].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9530;
-  fra.me.meth = LOCATE_parser___ReduceAction185___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9530 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos189] = 1;
-  return;
-}
-void parser___ReduceAction186___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 = 9534;
-  fra.me.meth = LOCATE_parser___ReduceAction186___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9545 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9545);
-    nit_exit(1);
-  }
-  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:9547 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9547);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9549);
-    nit_exit(1);
-  }
-  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:9551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9551);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9556 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9556);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9566 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction186___init(val_t p0, int* init_table){
-  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction186].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9568;
-  fra.me.meth = LOCATE_parser___ReduceAction186___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9568 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos190] = 1;
-  return;
-}
-void parser___ReduceAction187___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 = 9572;
-  fra.me.meth = LOCATE_parser___ReduceAction187___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9583 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9583);
-    nit_exit(1);
-  }
-  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:9585 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9585);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9587 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9587);
-    nit_exit(1);
-  }
-  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:9589 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9589);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9594 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9594);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9604 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction187___init(val_t p0, int* init_table){
-  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction187].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9606;
-  fra.me.meth = LOCATE_parser___ReduceAction187___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9606 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 1;
-  return;
-}
-void parser___ReduceAction188___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 = 9610;
-  fra.me.meth = LOCATE_parser___ReduceAction188___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9621 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9621);
-    nit_exit(1);
-  }
-  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:9623 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9623);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9625 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9625);
-    nit_exit(1);
-  }
-  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:9627 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9627);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9632 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9632);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9642 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction188___init(val_t p0, int* init_table){
-  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction188].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9644;
-  fra.me.meth = LOCATE_parser___ReduceAction188___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9644 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos192] = 1;
-  return;
-}
-void parser___ReduceAction189___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 = 9648;
-  fra.me.meth = LOCATE_parser___ReduceAction189___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9659 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9659);
-    nit_exit(1);
-  }
-  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:9661 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9661);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9663 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9663);
-    nit_exit(1);
-  }
-  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:9665 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9665);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9670 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9670);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9680 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction189___init(val_t p0, int* init_table){
-  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction189].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9682;
-  fra.me.meth = LOCATE_parser___ReduceAction189___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9682 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
-  return;
-}
-void parser___ReduceAction190___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 = 9686;
-  fra.me.meth = LOCATE_parser___ReduceAction190___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9697 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9697);
-    nit_exit(1);
-  }
-  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:9699 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9699);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9701 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9701);
-    nit_exit(1);
-  }
-  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:9703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9703);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9708);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9718 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction190___init(val_t p0, int* init_table){
-  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction190].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9720;
-  fra.me.meth = LOCATE_parser___ReduceAction190___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9720 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos194] = 1;
-  return;
-}
-void parser___ReduceAction191___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 = 9724;
-  fra.me.meth = LOCATE_parser___ReduceAction191___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9735 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9735);
-    nit_exit(1);
-  }
-  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:9737 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9737);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9739 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9739);
-    nit_exit(1);
-  }
-  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:9741 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9741);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9746 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9746);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9756 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction191___init(val_t p0, int* init_table){
-  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction191].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9758;
-  fra.me.meth = LOCATE_parser___ReduceAction191___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9758 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 1;
-  return;
-}
-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 = 9762;
-  fra.me.meth = LOCATE_parser___ReduceAction192___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9773);
-    nit_exit(1);
-  }
-  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:9775 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9775);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9777 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9777);
-    nit_exit(1);
-  }
-  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:9779 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9779);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9784);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9794 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction192___init(val_t p0, int* init_table){
-  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction192].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9796;
-  fra.me.meth = LOCATE_parser___ReduceAction192___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9796 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos196] = 1;
-  return;
-}
-void parser___ReduceAction193___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 = 9800;
-  fra.me.meth = LOCATE_parser___ReduceAction193___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9811 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9811);
-    nit_exit(1);
-  }
-  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:9813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9813);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9815);
-    nit_exit(1);
-  }
-  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:9817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9817);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9822 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9822);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9832 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction193___init(val_t p0, int* init_table){
-  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction193].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos197]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9834;
-  fra.me.meth = LOCATE_parser___ReduceAction193___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9834 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 1;
-  return;
-}
-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 = 9838;
-  fra.me.meth = LOCATE_parser___ReduceAction194___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9850);
-    nit_exit(1);
-  }
-  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:9852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9852);
-    nit_exit(1);
-  }
-  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:9854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9854);
-    nit_exit(1);
-  }
-  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:9856 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9856);
-    nit_exit(1);
-  }
-  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:9858 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9858);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9864);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9874 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction194___init(val_t p0, int* init_table){
-  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction194].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9876;
-  fra.me.meth = LOCATE_parser___ReduceAction194___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9876 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos198] = 1;
-  return;
-}
-void parser___ReduceAction195___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 = 9880;
-  fra.me.meth = LOCATE_parser___ReduceAction195___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9891);
-    nit_exit(1);
-  }
-  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:9893 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9893);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:9895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9895);
-    nit_exit(1);
-  }
-  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:9897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9897);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9902 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9902);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9912 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction195___init(val_t p0, int* init_table){
-  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction195].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9914;
-  fra.me.meth = LOCATE_parser___ReduceAction195___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9914 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 1;
-  return;
-}
-void parser___ReduceAction196___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 = 9918;
-  fra.me.meth = LOCATE_parser___ReduceAction196___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9930);
-    nit_exit(1);
-  }
-  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:9932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9932);
-    nit_exit(1);
-  }
-  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:9934 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9934);
-    nit_exit(1);
-  }
-  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:9936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9936);
-    nit_exit(1);
-  }
-  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:9938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9938);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9944);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:9954 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction196___init(val_t p0, int* init_table){
-  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction196].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 9956;
-  fra.me.meth = LOCATE_parser___ReduceAction196___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9956 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos200] = 1;
-  return;
-}
-void parser___ReduceAction197___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 = 9960;
-  fra.me.meth = LOCATE_parser___ReduceAction197___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:9973 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9973);
-    nit_exit(1);
-  }
-  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:9975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9975);
-    nit_exit(1);
-  }
-  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:9977 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9977);
-    nit_exit(1);
-  }
-  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:9979 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9979);
-    nit_exit(1);
-  }
-  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:9981 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9981);
-    nit_exit(1);
-  }
-  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:9983 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9983);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:9990 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 9990);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10000 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction197___init(val_t p0, int* init_table){
-  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction197].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10002;
-  fra.me.meth = LOCATE_parser___ReduceAction197___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10002 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 1;
-  return;
-}
-void parser___ReduceAction198___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 = 10006;
-  fra.me.meth = LOCATE_parser___ReduceAction198___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10018);
-    nit_exit(1);
-  }
-  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:10020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10020);
-    nit_exit(1);
-  }
-  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:10022 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10022);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10024);
-    nit_exit(1);
-  }
-  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:10026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10026);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10031);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10041 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction198___init(val_t p0, int* init_table){
-  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction198].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10043;
-  fra.me.meth = LOCATE_parser___ReduceAction198___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10043 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos202] = 1;
-  return;
-}
-void parser___ReduceAction199___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 = 10047;
-  fra.me.meth = LOCATE_parser___ReduceAction199___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10059);
-    nit_exit(1);
-  }
-  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:10061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10061);
-    nit_exit(1);
-  }
-  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:10063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10063);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10065);
-    nit_exit(1);
-  }
-  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:10067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10067);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10072);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10082 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction199___init(val_t p0, int* init_table){
-  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction199].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10084;
-  fra.me.meth = LOCATE_parser___ReduceAction199___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10084 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 1;
-  return;
-}
-void parser___ReduceAction200___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 = 10088;
-  fra.me.meth = LOCATE_parser___ReduceAction200___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10100 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10100);
-    nit_exit(1);
-  }
-  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:10102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10102);
-    nit_exit(1);
-  }
-  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:10104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10104);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10106);
-    nit_exit(1);
-  }
-  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:10108 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10108);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10113);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10123 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction200___init(val_t p0, int* init_table){
-  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction200].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10125;
-  fra.me.meth = LOCATE_parser___ReduceAction200___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10125 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos204] = 1;
-  return;
-}
-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 = 10129;
-  fra.me.meth = LOCATE_parser___ReduceAction201___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10141);
-    nit_exit(1);
-  }
-  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:10143 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10143);
-    nit_exit(1);
-  }
-  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:10145 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10145);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10147 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10147);
-    nit_exit(1);
-  }
-  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:10149 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10149);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10154 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10154);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10164 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction201___init(val_t p0, int* init_table){
-  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction201].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10166;
-  fra.me.meth = LOCATE_parser___ReduceAction201___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10166 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
-  return;
-}
-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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10170;
-  fra.me.meth = LOCATE_parser___ReduceAction202___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10182);
-    nit_exit(1);
-  }
-  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:10184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10184);
-    nit_exit(1);
-  }
-  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:10186 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10186);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10188 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10188);
-    nit_exit(1);
-  }
-  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:10190 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10190);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10195 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10195);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10205 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction202___init(val_t p0, int* init_table){
-  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction202].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10207;
-  fra.me.meth = LOCATE_parser___ReduceAction202___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10207 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos206] = 1;
-  return;
-}
-void parser___ReduceAction203___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 = 10211;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10223 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10223);
-    nit_exit(1);
-  }
-  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:10225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10225);
-    nit_exit(1);
-  }
-  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:10227 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10227);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10229 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10229);
-    nit_exit(1);
-  }
-  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:10231 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10231);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10236);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10246 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction203___init(val_t p0, int* init_table){
-  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction203].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10248;
-  fra.me.meth = LOCATE_parser___ReduceAction203___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10248 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
-  return;
-}
-void parser___ReduceAction204___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 = 10252;
-  fra.me.meth = LOCATE_parser___ReduceAction204___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10264 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10264);
-    nit_exit(1);
-  }
-  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:10266 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10266);
-    nit_exit(1);
-  }
-  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:10268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10268);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10270 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10270);
-    nit_exit(1);
-  }
-  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:10272 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10272);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10277);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10287 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction204___init(val_t p0, int* init_table){
-  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction204].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10289;
-  fra.me.meth = LOCATE_parser___ReduceAction204___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10289 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos208] = 1;
-  return;
-}
-void parser___ReduceAction205___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 = 10293;
-  fra.me.meth = LOCATE_parser___ReduceAction205___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10305 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10305);
-    nit_exit(1);
-  }
-  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:10307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10307);
-    nit_exit(1);
-  }
-  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:10309 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10309);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10311 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10311);
-    nit_exit(1);
-  }
-  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:10313 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10313);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10318);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10328 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction205___init(val_t p0, int* init_table){
-  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction205].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos209]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10330;
-  fra.me.meth = LOCATE_parser___ReduceAction205___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10330 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
-  return;
-}
-void parser___ReduceAction206___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 = 10334;
-  fra.me.meth = LOCATE_parser___ReduceAction206___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10346 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10346);
-    nit_exit(1);
-  }
-  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:10348 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10348);
-    nit_exit(1);
-  }
-  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:10350 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10350);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10352 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10352);
-    nit_exit(1);
-  }
-  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:10354 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10354);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10359);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10369 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction206___init(val_t p0, int* init_table){
-  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction206].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10371;
-  fra.me.meth = LOCATE_parser___ReduceAction206___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10371 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos210] = 1;
-  return;
-}
-void parser___ReduceAction207___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 = 10375;
-  fra.me.meth = LOCATE_parser___ReduceAction207___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10387 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10387);
-    nit_exit(1);
-  }
-  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:10389 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10389);
-    nit_exit(1);
-  }
-  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:10391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10391);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10393 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10393);
-    nit_exit(1);
-  }
-  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:10395 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10395);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10400 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10400);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10410 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction207___init(val_t p0, int* init_table){
-  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction207].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10412;
-  fra.me.meth = LOCATE_parser___ReduceAction207___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10412 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
-  return;
-}
-void parser___ReduceAction208___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 = 10416;
-  fra.me.meth = LOCATE_parser___ReduceAction208___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10428 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10428);
-    nit_exit(1);
-  }
-  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:10430 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10430);
-    nit_exit(1);
-  }
-  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:10432 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10432);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10434 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10434);
-    nit_exit(1);
-  }
-  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:10436 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10436);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10441);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10451 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction208___init(val_t p0, int* init_table){
-  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction208].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10453;
-  fra.me.meth = LOCATE_parser___ReduceAction208___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10453 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos212] = 1;
-  return;
-}
-void parser___ReduceAction209___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 = 10457;
-  fra.me.meth = LOCATE_parser___ReduceAction209___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10469 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10469);
-    nit_exit(1);
-  }
-  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:10471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10471);
-    nit_exit(1);
-  }
-  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:10473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10475);
-    nit_exit(1);
-  }
-  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:10477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10477);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10482);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10492 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction209___init(val_t p0, int* init_table){
-  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction209].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10494;
-  fra.me.meth = LOCATE_parser___ReduceAction209___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10494 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
-  return;
-}
-void parser___ReduceAction210___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 = 10498;
-  fra.me.meth = LOCATE_parser___ReduceAction210___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10511);
-    nit_exit(1);
-  }
-  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:10513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10513);
-    nit_exit(1);
-  }
-  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:10515 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10515);
-    nit_exit(1);
-  }
-  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:10517 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10517);
-    nit_exit(1);
-  }
-  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:10519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10519);
-    nit_exit(1);
-  }
-  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:10521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10521);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10527 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10527);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10537 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction210___init(val_t p0, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction210].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10539;
-  fra.me.meth = LOCATE_parser___ReduceAction210___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10539 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos214] = 1;
-  return;
-}
-void parser___ReduceAction211___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 = 10543;
-  fra.me.meth = LOCATE_parser___ReduceAction211___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10555);
-    nit_exit(1);
-  }
-  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:10557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10557);
-    nit_exit(1);
-  }
-  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:10559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10559);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10561);
-    nit_exit(1);
-  }
-  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:10563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10563);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10568);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10578 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction211___init(val_t p0, int* init_table){
-  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction211].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos215]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10580;
-  fra.me.meth = LOCATE_parser___ReduceAction211___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10580 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
-  return;
-}
-void parser___ReduceAction212___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 = 10584;
-  fra.me.meth = LOCATE_parser___ReduceAction212___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10597);
-    nit_exit(1);
-  }
-  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:10599 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10599);
-    nit_exit(1);
-  }
-  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:10601 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10601);
-    nit_exit(1);
-  }
-  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:10603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10603);
-    nit_exit(1);
-  }
-  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:10605 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10605);
-    nit_exit(1);
-  }
-  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:10607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10607);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10613 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10613);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10623 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction212___init(val_t p0, int* init_table){
-  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction212].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10625;
-  fra.me.meth = LOCATE_parser___ReduceAction212___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10625 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos216] = 1;
-  return;
-}
-void parser___ReduceAction213___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 = 10629;
-  fra.me.meth = LOCATE_parser___ReduceAction213___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10643 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10643);
-    nit_exit(1);
-  }
-  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:10645 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10645);
-    nit_exit(1);
-  }
-  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:10647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10647);
-    nit_exit(1);
-  }
-  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:10649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10649);
-    nit_exit(1);
-  }
-  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:10651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10651);
-    nit_exit(1);
-  }
-  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:10653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10653);
-    nit_exit(1);
-  }
-  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:10655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10655);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10662);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10672 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction213___init(val_t p0, int* init_table){
-  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction213].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10674;
-  fra.me.meth = LOCATE_parser___ReduceAction213___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10674 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
-  return;
-}
-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 = 10678;
-  fra.me.meth = LOCATE_parser___ReduceAction214___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10689);
-    nit_exit(1);
-  }
-  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:10691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10691);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10693);
-    nit_exit(1);
-  }
-  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:10695 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10695);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10700);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10710 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction214___init(val_t p0, int* init_table){
-  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction214].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10712;
-  fra.me.meth = LOCATE_parser___ReduceAction214___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10712 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos218] = 1;
-  return;
-}
-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 = 10716;
-  fra.me.meth = LOCATE_parser___ReduceAction215___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10727 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10727);
-    nit_exit(1);
-  }
-  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:10729 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10729);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10731);
-    nit_exit(1);
-  }
-  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:10733 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10733);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10738);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10748 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction215___init(val_t p0, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction215].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10750;
-  fra.me.meth = LOCATE_parser___ReduceAction215___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10750 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
-  return;
-}
-void parser___ReduceAction216___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 = 10754;
-  fra.me.meth = LOCATE_parser___ReduceAction216___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10765);
-    nit_exit(1);
-  }
-  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:10767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10767);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10769);
-    nit_exit(1);
-  }
-  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:10771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10771);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10776 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10776);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10786 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction216___init(val_t p0, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction216].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos220]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10788;
-  fra.me.meth = LOCATE_parser___ReduceAction216___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10788 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos220] = 1;
-  return;
-}
-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 = 10792;
-  fra.me.meth = LOCATE_parser___ReduceAction217___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10803);
-    nit_exit(1);
-  }
-  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:10805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10805);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10807);
-    nit_exit(1);
-  }
-  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:10809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10809);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10814);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10824 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction217___init(val_t p0, int* init_table){
-  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction217].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos221]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10826;
-  fra.me.meth = LOCATE_parser___ReduceAction217___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10826 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos221] = 1;
-  return;
-}
-void parser___ReduceAction218___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 = 10830;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10841 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10841);
-    nit_exit(1);
-  }
-  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:10843 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10843);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10845 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10845);
-    nit_exit(1);
-  }
-  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:10847 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10847);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10852);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10862 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction218___init(val_t p0, int* init_table){
-  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction218].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10864;
-  fra.me.meth = LOCATE_parser___ReduceAction218___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10864 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos222] = 1;
-  return;
-}
-void parser___ReduceAction219___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 = 10868;
-  fra.me.meth = LOCATE_parser___ReduceAction219___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10879 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10879);
-    nit_exit(1);
-  }
-  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:10881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10881);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10883 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10883);
-    nit_exit(1);
-  }
-  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:10885 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10885);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10890);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10900 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction219___init(val_t p0, int* init_table){
-  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction219].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10902;
-  fra.me.meth = LOCATE_parser___ReduceAction219___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10902 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
-  return;
-}
-void parser___ReduceAction220___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 = 10906;
-  fra.me.meth = LOCATE_parser___ReduceAction220___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10917);
-    nit_exit(1);
-  }
-  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:10919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10919);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10921);
-    nit_exit(1);
-  }
-  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:10923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10923);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10928 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10928);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10938 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction220___init(val_t p0, int* init_table){
-  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction220].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10940;
-  fra.me.meth = LOCATE_parser___ReduceAction220___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10940 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos224] = 1;
-  return;
-}
-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 tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10944;
-  fra.me.meth = LOCATE_parser___ReduceAction221___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10955);
-    nit_exit(1);
-  }
-  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:10957 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10957);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10959);
-    nit_exit(1);
-  }
-  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:10961 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10961);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:10966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10966);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:10976 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction221___init(val_t p0, int* init_table){
-  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction221].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 10978;
-  fra.me.meth = LOCATE_parser___ReduceAction221___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:10978 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
-  return;
-}
-void parser___ReduceAction222___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 = 10982;
-  fra.me.meth = LOCATE_parser___ReduceAction222___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:10993 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10993);
-    nit_exit(1);
-  }
-  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:10995 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10995);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:10997 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10997);
-    nit_exit(1);
-  }
-  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:10999 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 10999);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11004 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11004);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11014 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction222___init(val_t p0, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction222].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11016;
-  fra.me.meth = LOCATE_parser___ReduceAction222___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11016 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos226] = 1;
-  return;
-}
-void parser___ReduceAction223___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 = 11020;
-  fra.me.meth = LOCATE_parser___ReduceAction223___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11031);
-    nit_exit(1);
-  }
-  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:11033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11033);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11035 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11035);
-    nit_exit(1);
-  }
-  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:11037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11037);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11042 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11042);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11052 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction223___init(val_t p0, int* init_table){
-  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction223].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11054;
-  fra.me.meth = LOCATE_parser___ReduceAction223___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11054 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
-  return;
-}
-void parser___ReduceAction224___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 = 11058;
-  fra.me.meth = LOCATE_parser___ReduceAction224___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11069 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11069);
-    nit_exit(1);
-  }
-  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:11071 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11071);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11073 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11073);
-    nit_exit(1);
-  }
-  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:11075 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11075);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11080);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11090 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction224___init(val_t p0, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction224].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11092;
-  fra.me.meth = LOCATE_parser___ReduceAction224___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11092 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos228] = 1;
-  return;
-}
-void parser___ReduceAction225___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 = 11096;
-  fra.me.meth = LOCATE_parser___ReduceAction225___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11107 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11107);
-    nit_exit(1);
-  }
-  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:11109 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11109);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11111 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11111);
-    nit_exit(1);
-  }
-  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:11113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11113);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11118);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11128 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction225___init(val_t p0, int* init_table){
-  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction225].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos229]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11130;
-  fra.me.meth = LOCATE_parser___ReduceAction225___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11130 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
-  return;
-}
-void parser___ReduceAction226___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 = 11134;
-  fra.me.meth = LOCATE_parser___ReduceAction226___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11146 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11146);
-    nit_exit(1);
-  }
-  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:11148 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11148);
-    nit_exit(1);
-  }
-  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:11150 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11150);
-    nit_exit(1);
-  }
-  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:11152 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11152);
-    nit_exit(1);
-  }
-  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:11154 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11154);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11160 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11160);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11170 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction226___init(val_t p0, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction226].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11172;
-  fra.me.meth = LOCATE_parser___ReduceAction226___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11172 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos230] = 1;
-  return;
-}
-void parser___ReduceAction227___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 = 11176;
-  fra.me.meth = LOCATE_parser___ReduceAction227___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11187);
-    nit_exit(1);
-  }
-  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:11189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11189);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11191);
-    nit_exit(1);
-  }
-  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:11193 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11193);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11198 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11198);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11208 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction227___init(val_t p0, int* init_table){
-  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction227].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11210;
-  fra.me.meth = LOCATE_parser___ReduceAction227___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11210 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
-  return;
-}
-void parser___ReduceAction228___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 = 11214;
-  fra.me.meth = LOCATE_parser___ReduceAction228___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11226);
-    nit_exit(1);
-  }
-  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:11228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11228);
-    nit_exit(1);
-  }
-  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:11230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11230);
-    nit_exit(1);
-  }
-  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:11232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11232);
-    nit_exit(1);
-  }
-  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:11234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11234);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11240 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11240);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11250 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction228___init(val_t p0, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction228].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11252;
-  fra.me.meth = LOCATE_parser___ReduceAction228___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11252 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
-  return;
-}
-void parser___ReduceAction229___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 = 11256;
-  fra.me.meth = LOCATE_parser___ReduceAction229___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11269);
-    nit_exit(1);
-  }
-  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:11271 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11271);
-    nit_exit(1);
-  }
-  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:11273 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11273);
-    nit_exit(1);
-  }
-  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:11275 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11275);
-    nit_exit(1);
-  }
-  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:11277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11277);
-    nit_exit(1);
-  }
-  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:11279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11279);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11286);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11296 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction229___init(val_t p0, int* init_table){
-  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction229].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11298;
-  fra.me.meth = LOCATE_parser___ReduceAction229___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11298 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
-  return;
-}
-void parser___ReduceAction230___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 = 11302;
-  fra.me.meth = LOCATE_parser___ReduceAction230___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11314);
-    nit_exit(1);
-  }
-  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:11316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11316);
-    nit_exit(1);
-  }
-  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:11318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11318);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11320);
-    nit_exit(1);
-  }
-  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:11322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11322);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11327);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11337 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction230___init(val_t p0, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction230].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11339;
-  fra.me.meth = LOCATE_parser___ReduceAction230___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11339 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos234] = 1;
-  return;
-}
-void parser___ReduceAction231___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 = 11343;
-  fra.me.meth = LOCATE_parser___ReduceAction231___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11355 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11355);
-    nit_exit(1);
-  }
-  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:11357 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11357);
-    nit_exit(1);
-  }
-  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:11359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11359);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11361 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11361);
-    nit_exit(1);
-  }
-  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:11363 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11363);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11368);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11378 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction231___init(val_t p0, int* init_table){
-  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction231].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11380;
-  fra.me.meth = LOCATE_parser___ReduceAction231___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11380 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 1;
-  return;
-}
-void parser___ReduceAction232___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 = 11384;
-  fra.me.meth = LOCATE_parser___ReduceAction232___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11396 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11396);
-    nit_exit(1);
-  }
-  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:11398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11398);
-    nit_exit(1);
-  }
-  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:11400 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11400);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11402 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11402);
-    nit_exit(1);
-  }
-  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:11404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11404);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11409);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11419 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction232___init(val_t p0, int* init_table){
-  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction232].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11421;
-  fra.me.meth = LOCATE_parser___ReduceAction232___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11421 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos236] = 1;
-  return;
-}
-void parser___ReduceAction233___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 = 11425;
-  fra.me.meth = LOCATE_parser___ReduceAction233___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11437);
-    nit_exit(1);
-  }
-  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:11439 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11439);
-    nit_exit(1);
-  }
-  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:11441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11441);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11443 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11443);
-    nit_exit(1);
-  }
-  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:11445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11445);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11450 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11450);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11460 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction233___init(val_t p0, int* init_table){
-  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction233].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11462;
-  fra.me.meth = LOCATE_parser___ReduceAction233___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11462 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 1;
-  return;
-}
-void parser___ReduceAction234___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 = 11466;
-  fra.me.meth = LOCATE_parser___ReduceAction234___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11478 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11478);
-    nit_exit(1);
-  }
-  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:11480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11480);
-    nit_exit(1);
-  }
-  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:11482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11482);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11484);
-    nit_exit(1);
-  }
-  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:11486 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11486);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11491 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11491);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11501 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction234___init(val_t p0, int* init_table){
-  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction234].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11503;
-  fra.me.meth = LOCATE_parser___ReduceAction234___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11503 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos238] = 1;
-  return;
-}
-void parser___ReduceAction235___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 = 11507;
-  fra.me.meth = LOCATE_parser___ReduceAction235___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11519);
-    nit_exit(1);
-  }
-  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:11521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11521);
-    nit_exit(1);
-  }
-  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:11523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11523);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11525 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11525);
-    nit_exit(1);
-  }
-  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:11527 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11527);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11532);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11542 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction235___init(val_t p0, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction235].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11544;
-  fra.me.meth = LOCATE_parser___ReduceAction235___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11544 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 1;
-  return;
-}
-void parser___ReduceAction236___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 = 11548;
-  fra.me.meth = LOCATE_parser___ReduceAction236___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11560 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11560);
-    nit_exit(1);
-  }
-  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:11562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11562);
-    nit_exit(1);
-  }
-  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:11564 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11564);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11566 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11566);
-    nit_exit(1);
-  }
-  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:11568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11568);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11573);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11583 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction236___init(val_t p0, int* init_table){
-  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction236].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11585;
-  fra.me.meth = LOCATE_parser___ReduceAction236___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11585 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos240] = 1;
-  return;
-}
-void parser___ReduceAction237___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 = 11589;
-  fra.me.meth = LOCATE_parser___ReduceAction237___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11601 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11601);
-    nit_exit(1);
-  }
-  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:11603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11603);
-    nit_exit(1);
-  }
-  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:11605 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11605);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11607);
-    nit_exit(1);
-  }
-  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:11609 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11609);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11614);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11624 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction237___init(val_t p0, int* init_table){
-  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction237].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11626;
-  fra.me.meth = LOCATE_parser___ReduceAction237___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11626 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
-  return;
-}
-void parser___ReduceAction238___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 = 11630;
-  fra.me.meth = LOCATE_parser___ReduceAction238___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11642 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11642);
-    nit_exit(1);
-  }
-  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:11644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11644);
-    nit_exit(1);
-  }
-  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:11646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11646);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11648);
-    nit_exit(1);
-  }
-  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:11650 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11650);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11655);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11665 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction238___init(val_t p0, int* init_table){
-  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction238].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11667;
-  fra.me.meth = LOCATE_parser___ReduceAction238___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11667 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos242] = 1;
-  return;
-}
-void parser___ReduceAction239___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 = 11671;
-  fra.me.meth = LOCATE_parser___ReduceAction239___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11683);
-    nit_exit(1);
-  }
-  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:11685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11685);
-    nit_exit(1);
-  }
-  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:11687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11687);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11689);
-    nit_exit(1);
-  }
-  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:11691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11691);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11696);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11706 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction239___init(val_t p0, int* init_table){
-  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction239].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11708;
-  fra.me.meth = LOCATE_parser___ReduceAction239___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11708 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
-  return;
-}
-void parser___ReduceAction240___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 = 11712;
-  fra.me.meth = LOCATE_parser___ReduceAction240___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11724);
-    nit_exit(1);
-  }
-  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:11726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11726);
-    nit_exit(1);
-  }
-  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:11728 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11728);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11730 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11730);
-    nit_exit(1);
-  }
-  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:11732 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11732);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11737 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11737);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11747 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction240___init(val_t p0, int* init_table){
-  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction240].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11749;
-  fra.me.meth = LOCATE_parser___ReduceAction240___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11749 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos244] = 1;
-  return;
-}
-void parser___ReduceAction241___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 = 11753;
-  fra.me.meth = LOCATE_parser___ReduceAction241___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11765);
-    nit_exit(1);
-  }
-  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:11767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11767);
-    nit_exit(1);
-  }
-  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:11769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11769);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11771);
-    nit_exit(1);
-  }
-  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:11773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11773);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11778);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11788 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction241___init(val_t p0, int* init_table){
-  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction241].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11790;
-  fra.me.meth = LOCATE_parser___ReduceAction241___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11790 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos245] = 1;
-  return;
-}
-void parser___ReduceAction242___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 = 11794;
-  fra.me.meth = LOCATE_parser___ReduceAction242___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11807);
-    nit_exit(1);
-  }
-  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:11809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11809);
-    nit_exit(1);
-  }
-  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:11811 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11811);
-    nit_exit(1);
-  }
-  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:11813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11813);
-    nit_exit(1);
-  }
-  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:11815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11815);
-    nit_exit(1);
-  }
-  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:11817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11817);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11823 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11823);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11833 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction242___init(val_t p0, int* init_table){
-  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction242].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11835;
-  fra.me.meth = LOCATE_parser___ReduceAction242___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11835 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
-  return;
-}
-void parser___ReduceAction243___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 = 11839;
-  fra.me.meth = LOCATE_parser___ReduceAction243___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11851);
-    nit_exit(1);
-  }
-  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:11853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11853);
-    nit_exit(1);
-  }
-  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:11855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11855);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11857 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11857);
-    nit_exit(1);
-  }
-  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:11859 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11859);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11864);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11874 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction243___init(val_t p0, int* init_table){
-  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction243].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11876;
-  fra.me.meth = LOCATE_parser___ReduceAction243___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11876 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
-  return;
-}
-void parser___ReduceAction244___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 = 11880;
-  fra.me.meth = LOCATE_parser___ReduceAction244___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11893 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11893);
-    nit_exit(1);
-  }
-  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:11895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11895);
-    nit_exit(1);
-  }
-  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:11897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11897);
-    nit_exit(1);
-  }
-  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:11899 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11899);
-    nit_exit(1);
-  }
-  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:11901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11901);
-    nit_exit(1);
-  }
-  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:11903 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11903);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11909 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11909);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11919 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction244___init(val_t p0, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction244].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 11921;
-  fra.me.meth = LOCATE_parser___ReduceAction244___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11921 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
-  return;
-}
-void parser___ReduceAction245___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 = 11925;
-  fra.me.meth = LOCATE_parser___ReduceAction245___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11939 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11939);
-    nit_exit(1);
-  }
-  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:11941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11941);
-    nit_exit(1);
-  }
-  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:11943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11943);
-    nit_exit(1);
-  }
-  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:11945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11945);
-    nit_exit(1);
-  }
-  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:11947 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11947);
-    nit_exit(1);
-  }
-  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:11949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11949);
-    nit_exit(1);
-  }
-  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:11951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11951);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11958);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:11968 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction245___init(val_t p0, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction245].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos249]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11970;
-  fra.me.meth = LOCATE_parser___ReduceAction245___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:11970 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
-  return;
-}
-void parser___ReduceAction246___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 = 11974;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:11985 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11985);
-    nit_exit(1);
-  }
-  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:11987 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11987);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:11989 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11989);
-    nit_exit(1);
-  }
-  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:11991 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11991);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:11996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 11996);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12007 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction246___init(val_t p0, int* init_table){
-  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction246].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12009;
-  fra.me.meth = LOCATE_parser___ReduceAction246___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12009 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos250] = 1;
-  return;
-}
-void parser___ReduceAction247___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 = 12013;
-  fra.me.meth = LOCATE_parser___ReduceAction247___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12024);
-    nit_exit(1);
-  }
-  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:12026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12026);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12028);
-    nit_exit(1);
-  }
-  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:12030 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12030);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12035 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12035);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12046 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction247___init(val_t p0, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction247].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos251]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12048;
-  fra.me.meth = LOCATE_parser___ReduceAction247___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12048 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
-  return;
-}
-void parser___ReduceAction248___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 = 12052;
-  fra.me.meth = LOCATE_parser___ReduceAction248___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12063);
-    nit_exit(1);
-  }
-  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:12065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12065);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12067);
-    nit_exit(1);
-  }
-  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:12069 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12069);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12074);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12085 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction248___init(val_t p0, int* init_table){
-  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction248].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12087;
-  fra.me.meth = LOCATE_parser___ReduceAction248___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12087 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos252] = 1;
-  return;
-}
-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 tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12091;
-  fra.me.meth = LOCATE_parser___ReduceAction249___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12102);
-    nit_exit(1);
-  }
-  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:12104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12104);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12106);
-    nit_exit(1);
-  }
-  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:12108 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12108);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12113);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12124 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction249___init(val_t p0, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction249].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos253]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12126;
-  fra.me.meth = LOCATE_parser___ReduceAction249___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12126 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
-  return;
-}
-void parser___ReduceAction250___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 = 12130;
-  fra.me.meth = LOCATE_parser___ReduceAction250___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12141);
-    nit_exit(1);
-  }
-  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:12143 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12143);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12145 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12145);
-    nit_exit(1);
-  }
-  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:12147 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12147);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12152 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12152);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12163 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction250___init(val_t p0, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction250].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12165;
-  fra.me.meth = LOCATE_parser___ReduceAction250___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12165 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
-  return;
-}
-void parser___ReduceAction251___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 = 12169;
-  fra.me.meth = LOCATE_parser___ReduceAction251___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12180 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12180);
-    nit_exit(1);
-  }
-  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:12182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12182);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12184);
-    nit_exit(1);
-  }
-  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:12186 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12186);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12191);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12202 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction251___init(val_t p0, int* init_table){
-  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction251].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos255]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12204;
-  fra.me.meth = LOCATE_parser___ReduceAction251___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12204 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
-  return;
-}
-void parser___ReduceAction252___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 = 12208;
-  fra.me.meth = LOCATE_parser___ReduceAction252___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12219 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12219);
-    nit_exit(1);
-  }
-  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:12221 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12221);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12223 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12223);
-    nit_exit(1);
-  }
-  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:12225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12225);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12230);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12241 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction252___init(val_t p0, int* init_table){
-  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction252].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12243;
-  fra.me.meth = LOCATE_parser___ReduceAction252___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12243 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos256] = 1;
-  return;
-}
-void parser___ReduceAction253___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 = 12247;
-  fra.me.meth = LOCATE_parser___ReduceAction253___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12258 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12258);
-    nit_exit(1);
-  }
-  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:12260 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12260);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12262 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12262);
-    nit_exit(1);
-  }
-  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:12264 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12264);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12269);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12280 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction253___init(val_t p0, int* init_table){
-  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction253].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos257]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12282;
-  fra.me.meth = LOCATE_parser___ReduceAction253___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12282 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
-  return;
-}
-void parser___ReduceAction254___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 = 12286;
-  fra.me.meth = LOCATE_parser___ReduceAction254___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12297 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12297);
-    nit_exit(1);
-  }
-  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:12299 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12299);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12301 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12301);
-    nit_exit(1);
-  }
-  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:12303 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12303);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12308 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12308);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12319 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction254___init(val_t p0, int* init_table){
-  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction254].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos258]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12321;
-  fra.me.meth = LOCATE_parser___ReduceAction254___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12321 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos258] = 1;
-  return;
-}
-void parser___ReduceAction255___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 = 12325;
-  fra.me.meth = LOCATE_parser___ReduceAction255___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12336 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12336);
-    nit_exit(1);
-  }
-  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:12338 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12338);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12340 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12340);
-    nit_exit(1);
-  }
-  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:12342 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12342);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12347 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12347);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12358 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction255___init(val_t p0, int* init_table){
-  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction255].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos259]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12360;
-  fra.me.meth = LOCATE_parser___ReduceAction255___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12360 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
-  return;
-}
-void parser___ReduceAction256___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 = 12364;
-  fra.me.meth = LOCATE_parser___ReduceAction256___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12375 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12375);
-    nit_exit(1);
-  }
-  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:12377 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12377);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12379);
-    nit_exit(1);
-  }
-  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:12381 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12381);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12386 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12386);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12397 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction256___init(val_t p0, int* init_table){
-  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction256].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12399;
-  fra.me.meth = LOCATE_parser___ReduceAction256___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12399 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos260] = 1;
-  return;
-}
-void parser___ReduceAction257___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 = 12403;
-  fra.me.meth = LOCATE_parser___ReduceAction257___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12414);
-    nit_exit(1);
-  }
-  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:12416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12416);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12418);
-    nit_exit(1);
-  }
-  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:12420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12420);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12425 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12425);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12436 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction257___init(val_t p0, int* init_table){
-  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction257].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos261]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12438;
-  fra.me.meth = LOCATE_parser___ReduceAction257___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12438 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
-  return;
-}
-void parser___ReduceAction258___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 = 12442;
-  fra.me.meth = LOCATE_parser___ReduceAction258___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12454 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12454);
-    nit_exit(1);
-  }
-  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:12456 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12456);
-    nit_exit(1);
-  }
-  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:12458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12458);
-    nit_exit(1);
-  }
-  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:12460 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12460);
-    nit_exit(1);
-  }
-  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:12462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12462);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12468 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12468);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12479 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction258___init(val_t p0, int* init_table){
-  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction258].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12481;
-  fra.me.meth = LOCATE_parser___ReduceAction258___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12481 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
-  return;
-}
-void parser___ReduceAction259___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 = 12485;
-  fra.me.meth = LOCATE_parser___ReduceAction259___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12496 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12496);
-    nit_exit(1);
-  }
-  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:12498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12498);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12500 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12500);
-    nit_exit(1);
-  }
-  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:12502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12502);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12507 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12507);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12518 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction259___init(val_t p0, int* init_table){
-  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction259].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos263]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12520;
-  fra.me.meth = LOCATE_parser___ReduceAction259___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12520 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
-  return;
-}
-void parser___ReduceAction260___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 = 12524;
-  fra.me.meth = LOCATE_parser___ReduceAction260___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12536);
-    nit_exit(1);
-  }
-  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:12538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12538);
-    nit_exit(1);
-  }
-  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:12540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12540);
-    nit_exit(1);
-  }
-  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:12542 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12542);
-    nit_exit(1);
-  }
-  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:12544 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12544);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12550);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12561 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction260___init(val_t p0, int* init_table){
-  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction260].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12563;
-  fra.me.meth = LOCATE_parser___ReduceAction260___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12563 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos264] = 1;
-  return;
-}
-void parser___ReduceAction261___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 = 12567;
-  fra.me.meth = LOCATE_parser___ReduceAction261___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12580 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12580);
-    nit_exit(1);
-  }
-  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:12582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12582);
-    nit_exit(1);
-  }
-  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:12584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12584);
-    nit_exit(1);
-  }
-  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:12586 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12586);
-    nit_exit(1);
-  }
-  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:12588 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12588);
-    nit_exit(1);
-  }
-  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:12590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12590);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12597);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12608 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction261___init(val_t p0, int* init_table){
-  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction261].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos265]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12610;
-  fra.me.meth = LOCATE_parser___ReduceAction261___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12610 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
-  return;
-}
-void parser___ReduceAction262___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 = 12614;
-  fra.me.meth = LOCATE_parser___ReduceAction262___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12626);
-    nit_exit(1);
-  }
-  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:12628 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12628);
-    nit_exit(1);
-  }
-  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:12630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12630);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12632 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12632);
-    nit_exit(1);
-  }
-  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:12634 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12634);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12639 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12639);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12650 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction262___init(val_t p0, int* init_table){
-  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction262].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos266]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12652;
-  fra.me.meth = LOCATE_parser___ReduceAction262___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12652 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
-  return;
-}
-void parser___ReduceAction263___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 = 12656;
-  fra.me.meth = LOCATE_parser___ReduceAction263___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12668 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12668);
-    nit_exit(1);
-  }
-  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:12670 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12670);
-    nit_exit(1);
-  }
-  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:12672 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12672);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12674 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12674);
-    nit_exit(1);
-  }
-  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:12676 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12676);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12681);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12692 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction263___init(val_t p0, int* init_table){
-  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction263].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos267]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12694;
-  fra.me.meth = LOCATE_parser___ReduceAction263___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12694 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
-  return;
-}
-void parser___ReduceAction264___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 = 12698;
-  fra.me.meth = LOCATE_parser___ReduceAction264___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12710);
-    nit_exit(1);
-  }
-  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:12712 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12712);
-    nit_exit(1);
-  }
-  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:12714 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12714);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12716 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12716);
-    nit_exit(1);
-  }
-  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:12718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12718);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12723 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12723);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12734 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction264___init(val_t p0, int* init_table){
-  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction264].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12736;
-  fra.me.meth = LOCATE_parser___ReduceAction264___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12736 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
-  return;
-}
-void parser___ReduceAction265___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 = 12740;
-  fra.me.meth = LOCATE_parser___ReduceAction265___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12752 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12752);
-    nit_exit(1);
-  }
-  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:12754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12754);
-    nit_exit(1);
-  }
-  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:12756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12756);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12758 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12758);
-    nit_exit(1);
-  }
-  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:12760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12760);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12765);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12776 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction265___init(val_t p0, int* init_table){
-  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction265].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos269]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12778;
-  fra.me.meth = LOCATE_parser___ReduceAction265___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12778 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
-  return;
-}
-void parser___ReduceAction266___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 = 12782;
-  fra.me.meth = LOCATE_parser___ReduceAction266___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12794);
-    nit_exit(1);
-  }
-  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:12796 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12796);
-    nit_exit(1);
-  }
-  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:12798 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12798);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12800 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12800);
-    nit_exit(1);
-  }
-  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:12802 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12802);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12807);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12818 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction266___init(val_t p0, int* init_table){
-  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction266].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos270]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12820;
-  fra.me.meth = LOCATE_parser___ReduceAction266___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12820 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
-  return;
-}
-void parser___ReduceAction267___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 = 12824;
-  fra.me.meth = LOCATE_parser___ReduceAction267___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12836 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12836);
-    nit_exit(1);
-  }
-  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:12838 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12838);
-    nit_exit(1);
-  }
-  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:12840 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12840);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12842 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12842);
-    nit_exit(1);
-  }
-  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:12844 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12844);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12849 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12849);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12860 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction267___init(val_t p0, int* init_table){
-  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction267].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos271]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12862;
-  fra.me.meth = LOCATE_parser___ReduceAction267___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12862 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos271] = 1;
-  return;
-}
-void parser___ReduceAction268___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 = 12866;
-  fra.me.meth = LOCATE_parser___ReduceAction268___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12878 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12878);
-    nit_exit(1);
-  }
-  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:12880 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12880);
-    nit_exit(1);
-  }
-  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:12882 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12882);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12884 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12884);
-    nit_exit(1);
-  }
-  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:12886 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12886);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12891);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12902 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction268___init(val_t p0, int* init_table){
-  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction268].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12904;
-  fra.me.meth = LOCATE_parser___ReduceAction268___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12904 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos272] = 1;
-  return;
-}
-void parser___ReduceAction269___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 = 12908;
-  fra.me.meth = LOCATE_parser___ReduceAction269___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12920 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12920);
-    nit_exit(1);
-  }
-  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:12922 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12922);
-    nit_exit(1);
-  }
-  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:12924 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12924);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12926 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12926);
-    nit_exit(1);
-  }
-  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:12928 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12928);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12933 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12933);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12944 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction269___init(val_t p0, int* init_table){
-  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction269].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos273]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12946;
-  fra.me.meth = LOCATE_parser___ReduceAction269___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12946 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
-  return;
-}
-void parser___ReduceAction270___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 = 12950;
-  fra.me.meth = LOCATE_parser___ReduceAction270___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:12962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12962);
-    nit_exit(1);
-  }
-  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:12964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12964);
-    nit_exit(1);
-  }
-  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:12966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12966);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:12968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12968);
-    nit_exit(1);
-  }
-  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:12970 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12970);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:12975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 12975);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:12986 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction270___init(val_t p0, int* init_table){
-  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction270].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 12988;
-  fra.me.meth = LOCATE_parser___ReduceAction270___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12988 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
-  return;
-}
-void parser___ReduceAction271___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 = 12992;
-  fra.me.meth = LOCATE_parser___ReduceAction271___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13004 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13004);
-    nit_exit(1);
-  }
-  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:13006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13006);
-    nit_exit(1);
-  }
-  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:13008 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13008);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:13010 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13010);
-    nit_exit(1);
-  }
-  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:13012 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13012);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13017 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13017);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13028 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction271___init(val_t p0, int* init_table){
-  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction271].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos275]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13030;
-  fra.me.meth = LOCATE_parser___ReduceAction271___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13030 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
-  return;
-}
-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 = 13034;
-  fra.me.meth = LOCATE_parser___ReduceAction272___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13046 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13046);
-    nit_exit(1);
-  }
-  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:13048 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13048);
-    nit_exit(1);
-  }
-  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:13050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13050);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:13052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13052);
-    nit_exit(1);
-  }
-  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:13054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13054);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13059);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13070 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction272___init(val_t p0, int* init_table){
-  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction272].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13072;
-  fra.me.meth = LOCATE_parser___ReduceAction272___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13072 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos276] = 1;
-  return;
-}
-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 = 13076;
-  fra.me.meth = LOCATE_parser___ReduceAction273___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13088 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13088);
-    nit_exit(1);
-  }
-  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:13090 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13090);
-    nit_exit(1);
-  }
-  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:13092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13092);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:13094 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13094);
-    nit_exit(1);
-  }
-  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:13096 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13096);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13101 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13101);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13112 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction273___init(val_t p0, int* init_table){
-  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction273].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos277]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13114;
-  fra.me.meth = LOCATE_parser___ReduceAction273___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13114 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
-  return;
-}
-void parser___ReduceAction274___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 = 13118;
-  fra.me.meth = LOCATE_parser___ReduceAction274___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13131 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13131);
-    nit_exit(1);
-  }
-  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:13133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13133);
-    nit_exit(1);
-  }
-  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:13135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13135);
-    nit_exit(1);
-  }
-  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:13137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13137);
-    nit_exit(1);
-  }
-  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:13139 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13139);
-    nit_exit(1);
-  }
-  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:13141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13141);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13147 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13147);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13158 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction274___init(val_t p0, int* init_table){
-  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction274].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13160;
-  fra.me.meth = LOCATE_parser___ReduceAction274___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13160 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos278] = 1;
-  return;
-}
-void parser___ReduceAction275___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 = 13164;
-  fra.me.meth = LOCATE_parser___ReduceAction275___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13176 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13176);
-    nit_exit(1);
-  }
-  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:13178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13178);
-    nit_exit(1);
-  }
-  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:13180 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13180);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:13182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13182);
-    nit_exit(1);
-  }
-  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:13184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13184);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13189);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13200 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction275___init(val_t p0, int* init_table){
-  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction275].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos279]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13202;
-  fra.me.meth = LOCATE_parser___ReduceAction275___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13202 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
-  return;
-}
-void parser___ReduceAction276___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 = 13206;
-  fra.me.meth = LOCATE_parser___ReduceAction276___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13219 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13219);
-    nit_exit(1);
-  }
-  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:13221 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13221);
-    nit_exit(1);
-  }
-  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:13223 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13223);
-    nit_exit(1);
-  }
-  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:13225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13225);
-    nit_exit(1);
-  }
-  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:13227 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13227);
-    nit_exit(1);
-  }
-  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:13229 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13229);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13235 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13235);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13246 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction276___init(val_t p0, int* init_table){
-  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction276].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13248;
-  fra.me.meth = LOCATE_parser___ReduceAction276___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13248 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
-  return;
-}
-void parser___ReduceAction277___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 = 13252;
-  fra.me.meth = LOCATE_parser___ReduceAction277___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13266 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13266);
-    nit_exit(1);
-  }
-  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:13268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13268);
-    nit_exit(1);
-  }
-  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:13270 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13270);
-    nit_exit(1);
-  }
-  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:13272 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13272);
-    nit_exit(1);
-  }
-  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:13274 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13274);
-    nit_exit(1);
-  }
-  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:13276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13276);
-    nit_exit(1);
-  }
-  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:13278 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13278);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:13285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13285);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13296 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction277___init(val_t p0, int* init_table){
-  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction277].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos281]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13298;
-  fra.me.meth = LOCATE_parser___ReduceAction277___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13298 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
-  return;
-}
-void parser___ReduceAction278___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 = 13302;
-  fra.me.meth = LOCATE_parser___ReduceAction278___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13314);
-    nit_exit(1);
-  }
-  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:13316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13316);
-    nit_exit(1);
-  }
-  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:13318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13318);
-    nit_exit(1);
-  }
-  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:13320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13320);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:13325 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13325);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13327);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13338 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction278___init(val_t p0, int* init_table){
-  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction278].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13340;
-  fra.me.meth = LOCATE_parser___ReduceAction278___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13340 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos282] = 1;
-  return;
-}
-void parser___ReduceAction279___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 = 13344;
-  fra.me.meth = LOCATE_parser___ReduceAction279___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13356 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13356);
-    nit_exit(1);
-  }
-  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:13358 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13358);
-    nit_exit(1);
-  }
-  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:13360 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13360);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:13362 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13362);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:13367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13367);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13369 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13369);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13380 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction279___init(val_t p0, int* init_table){
-  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction279].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos283]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13382;
-  fra.me.meth = LOCATE_parser___ReduceAction279___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13382 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
-  return;
-}
-void parser___ReduceAction280___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 = 13386;
-  fra.me.meth = LOCATE_parser___ReduceAction280___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13398);
-    nit_exit(1);
-  }
-  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:13400 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13400);
-    nit_exit(1);
-  }
-  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:13402 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13402);
-    nit_exit(1);
-  }
-  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:13404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13404);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:13409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13409);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13411);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13422 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction280___init(val_t p0, int* init_table){
-  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction280].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13424;
-  fra.me.meth = LOCATE_parser___ReduceAction280___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13424 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos284] = 1;
-  return;
-}
-void parser___ReduceAction281___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 = 13428;
-  fra.me.meth = LOCATE_parser___ReduceAction281___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13440 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13440);
-    nit_exit(1);
-  }
-  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:13442 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13442);
-    nit_exit(1);
-  }
-  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:13444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13444);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:13446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13446);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:13451 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13451);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13453 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13453);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13464 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction281___init(val_t p0, int* init_table){
-  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction281].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13466;
-  fra.me.meth = LOCATE_parser___ReduceAction281___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13466 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
-  return;
-}
-void parser___ReduceAction282___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 = 13470;
-  fra.me.meth = LOCATE_parser___ReduceAction282___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13482);
-    nit_exit(1);
-  }
-  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:13484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13484);
-    nit_exit(1);
-  }
-  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:13486 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13486);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:13488 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13488);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:13493 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13493);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13495 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13495);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13506 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction282___init(val_t p0, int* init_table){
-  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction282].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13508;
-  fra.me.meth = LOCATE_parser___ReduceAction282___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13508 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos286] = 1;
-  return;
-}
-void parser___ReduceAction283___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 = 13512;
-  fra.me.meth = LOCATE_parser___ReduceAction283___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13524 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13524);
-    nit_exit(1);
-  }
-  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:13526 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13526);
-    nit_exit(1);
-  }
-  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:13528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13528);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:13530 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13530);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:13535 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13535);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13537 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13537);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13548 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction283___init(val_t p0, int* init_table){
-  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction283].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13550;
-  fra.me.meth = LOCATE_parser___ReduceAction283___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13550 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos287] = 1;
-  return;
-}
-void parser___ReduceAction284___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 = 13554;
-  fra.me.meth = LOCATE_parser___ReduceAction284___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13566 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13566);
-    nit_exit(1);
-  }
-  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:13568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13568);
-    nit_exit(1);
-  }
-  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:13570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13570);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:13572 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13572);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:13577 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13577);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13579 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13579);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13590 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction284___init(val_t p0, int* init_table){
-  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction284].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13592;
-  fra.me.meth = LOCATE_parser___ReduceAction284___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13592 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos288] = 1;
-  return;
-}
-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 = 13596;
-  fra.me.meth = LOCATE_parser___ReduceAction285___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13608);
-    nit_exit(1);
-  }
-  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:13610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13610);
-    nit_exit(1);
-  }
-  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:13612 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13612);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:13614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13614);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:13619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13619);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13621 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13621);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13632 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction285___init(val_t p0, int* init_table){
-  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction285].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos289]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13634;
-  fra.me.meth = LOCATE_parser___ReduceAction285___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13634 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos289] = 1;
-  return;
-}
-void parser___ReduceAction286___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 = 13638;
-  fra.me.meth = LOCATE_parser___ReduceAction286___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13650 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13650);
-    nit_exit(1);
-  }
-  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:13652 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13652);
-    nit_exit(1);
-  }
-  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:13654 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13654);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:13656 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13656);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:13661 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13661);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13663 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13663);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13674 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction286___init(val_t p0, int* init_table){
-  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction286].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13676;
-  fra.me.meth = LOCATE_parser___ReduceAction286___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13676 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos290] = 1;
-  return;
-}
-void parser___ReduceAction287___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 = 13680;
-  fra.me.meth = LOCATE_parser___ReduceAction287___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13692);
-    nit_exit(1);
-  }
-  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:13694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13694);
-    nit_exit(1);
-  }
-  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:13696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13696);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:13698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13698);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:13703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13703);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13705 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13705);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13716 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction287___init(val_t p0, int* init_table){
-  int itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction287].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13718;
-  fra.me.meth = LOCATE_parser___ReduceAction287___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13718 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos291] = 1;
-  return;
-}
-void parser___ReduceAction288___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 = 13722;
-  fra.me.meth = LOCATE_parser___ReduceAction288___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13734 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13734);
-    nit_exit(1);
-  }
-  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:13736 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13736);
-    nit_exit(1);
-  }
-  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:13738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13738);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:13740 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13740);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:13745 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13745);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13747 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13747);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13758 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction288___init(val_t p0, int* init_table){
-  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction288].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13760;
-  fra.me.meth = LOCATE_parser___ReduceAction288___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13760 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos292] = 1;
-  return;
-}
-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 = 13764;
-  fra.me.meth = LOCATE_parser___ReduceAction289___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13776 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13776);
-    nit_exit(1);
-  }
-  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:13778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13778);
-    nit_exit(1);
-  }
-  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:13780 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13780);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:13782 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13782);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:13787 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13787);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13789 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13789);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13800 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction289___init(val_t p0, int* init_table){
-  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction289].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13802;
-  fra.me.meth = LOCATE_parser___ReduceAction289___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13802 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos293] = 1;
-  return;
-}
-void parser___ReduceAction290___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 = 13806;
-  fra.me.meth = LOCATE_parser___ReduceAction290___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13819);
-    nit_exit(1);
-  }
-  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:13821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13821);
-    nit_exit(1);
-  }
-  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:13823 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13823);
-    nit_exit(1);
-  }
-  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:13825 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13825);
-    nit_exit(1);
-  }
-  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:13827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13827);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:13833 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13833);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13835 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13835);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13846 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction290___init(val_t p0, int* init_table){
-  int itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction290].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13848;
-  fra.me.meth = LOCATE_parser___ReduceAction290___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13848 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos294] = 1;
-  return;
-}
-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 = 13852;
-  fra.me.meth = LOCATE_parser___ReduceAction291___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13864);
-    nit_exit(1);
-  }
-  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:13866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13866);
-    nit_exit(1);
-  }
-  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:13868 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13868);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:13870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13870);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:13875 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13875);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13877 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13877);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13888 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction291___init(val_t p0, int* init_table){
-  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction291].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13890;
-  fra.me.meth = LOCATE_parser___ReduceAction291___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13890 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos295] = 1;
-  return;
-}
-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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 13894;
-  fra.me.meth = LOCATE_parser___ReduceAction292___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13907 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13907);
-    nit_exit(1);
-  }
-  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:13909 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13909);
-    nit_exit(1);
-  }
-  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:13911 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13911);
-    nit_exit(1);
-  }
-  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:13913 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13913);
-    nit_exit(1);
-  }
-  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:13915 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13915);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:13921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13921);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13923);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13934 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction292___init(val_t p0, int* init_table){
-  int itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction292].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13936;
-  fra.me.meth = LOCATE_parser___ReduceAction292___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13936 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos296] = 1;
-  return;
-}
-void parser___ReduceAction293___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 = 13940;
-  fra.me.meth = LOCATE_parser___ReduceAction293___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:13954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13954);
-    nit_exit(1);
-  }
-  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:13956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13956);
-    nit_exit(1);
-  }
-  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:13958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13958);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:13960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13960);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:13962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13962);
-    nit_exit(1);
-  }
-  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:13964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13964);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:13971 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13971);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:13973 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 13973);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:13984 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction293___init(val_t p0, int* init_table){
-  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction293].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 13986;
-  fra.me.meth = LOCATE_parser___ReduceAction293___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:13986 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos297] = 1;
-  return;
-}
-void parser___ReduceAction294___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 = 13990;
-  fra.me.meth = LOCATE_parser___ReduceAction294___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14003);
-    nit_exit(1);
-  }
-  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:14005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14005);
-    nit_exit(1);
-  }
-  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:14007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14007);
-    nit_exit(1);
-  }
-  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:14009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14009);
-    nit_exit(1);
-  }
-  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:14011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14011);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:14016 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14016);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14018);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14029 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction294___init(val_t p0, int* init_table){
-  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction294].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14031;
-  fra.me.meth = LOCATE_parser___ReduceAction294___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14031 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos298] = 1;
-  return;
-}
-void parser___ReduceAction295___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 = 14035;
-  fra.me.meth = LOCATE_parser___ReduceAction295___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14048 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14048);
-    nit_exit(1);
-  }
-  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:14050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14050);
-    nit_exit(1);
-  }
-  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:14052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14052);
-    nit_exit(1);
-  }
-  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:14054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14054);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:14056 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14056);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:14061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14061);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14063);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14074 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction295___init(val_t p0, int* init_table){
-  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction295].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14076;
-  fra.me.meth = LOCATE_parser___ReduceAction295___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14076 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos299] = 1;
-  return;
-}
-void parser___ReduceAction296___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 = 14080;
-  fra.me.meth = LOCATE_parser___ReduceAction296___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14093);
-    nit_exit(1);
-  }
-  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:14095 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14095);
-    nit_exit(1);
-  }
-  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:14097 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14097);
-    nit_exit(1);
-  }
-  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:14099 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14099);
-    nit_exit(1);
-  }
-  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:14101 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14101);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:14106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14106);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14108 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14108);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14119 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction296___init(val_t p0, int* init_table){
-  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction296].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14121;
-  fra.me.meth = LOCATE_parser___ReduceAction296___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14121 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos300] = 1;
-  return;
-}
-void parser___ReduceAction297___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 = 14125;
-  fra.me.meth = LOCATE_parser___ReduceAction297___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14138 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14138);
-    nit_exit(1);
-  }
-  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:14140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14140);
-    nit_exit(1);
-  }
-  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:14142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14142);
-    nit_exit(1);
-  }
-  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:14144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14144);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:14146 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14146);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:14151 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14151);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14153 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14153);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14164 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction297___init(val_t p0, int* init_table){
-  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction297].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14166;
-  fra.me.meth = LOCATE_parser___ReduceAction297___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14166 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos301] = 1;
-  return;
-}
-void parser___ReduceAction298___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 = 14170;
-  fra.me.meth = LOCATE_parser___ReduceAction298___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14183 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14183);
-    nit_exit(1);
-  }
-  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:14185 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14185);
-    nit_exit(1);
-  }
-  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:14187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14187);
-    nit_exit(1);
-  }
-  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:14189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14189);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:14191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14191);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:14196 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14196);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14198 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14198);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14209 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction298___init(val_t p0, int* init_table){
-  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction298].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14211;
-  fra.me.meth = LOCATE_parser___ReduceAction298___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14211 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos302] = 1;
-  return;
-}
-void parser___ReduceAction299___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 = 14215;
-  fra.me.meth = LOCATE_parser___ReduceAction299___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14228);
-    nit_exit(1);
-  }
-  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:14230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14230);
-    nit_exit(1);
-  }
-  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:14232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14232);
-    nit_exit(1);
-  }
-  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:14234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14234);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:14236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14236);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:14241 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14241);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14243 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14243);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14254 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction299___init(val_t p0, int* init_table){
-  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction299].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14256;
-  fra.me.meth = LOCATE_parser___ReduceAction299___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14256 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos303] = 1;
-  return;
-}
-void parser___ReduceAction300___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 = 14260;
-  fra.me.meth = LOCATE_parser___ReduceAction300___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14273 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14273);
-    nit_exit(1);
-  }
-  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:14275 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14275);
-    nit_exit(1);
-  }
-  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:14277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14277);
-    nit_exit(1);
-  }
-  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:14279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14279);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:14281 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14281);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:14286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14286);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14288);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14299 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction300___init(val_t p0, int* init_table){
-  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction300].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14301;
-  fra.me.meth = LOCATE_parser___ReduceAction300___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14301 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos304] = 1;
-  return;
-}
-void parser___ReduceAction301___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 = 14305;
-  fra.me.meth = LOCATE_parser___ReduceAction301___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14318);
-    nit_exit(1);
-  }
-  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:14320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14320);
-    nit_exit(1);
-  }
-  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:14322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14322);
-    nit_exit(1);
-  }
-  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:14324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14324);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:14326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14326);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:14331 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14331);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14333 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14333);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14344 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction301___init(val_t p0, int* init_table){
-  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction301].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14346;
-  fra.me.meth = LOCATE_parser___ReduceAction301___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14346 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos305] = 1;
-  return;
-}
-void parser___ReduceAction302___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 = 14350;
-  fra.me.meth = LOCATE_parser___ReduceAction302___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14363 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14363);
-    nit_exit(1);
-  }
-  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:14365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14365);
-    nit_exit(1);
-  }
-  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:14367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14367);
-    nit_exit(1);
-  }
-  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:14369 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14369);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:14371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14371);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:14376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14376);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14378 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14378);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14389 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction302___init(val_t p0, int* init_table){
-  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction302].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos306]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 14391;
-  fra.me.meth = LOCATE_parser___ReduceAction302___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14391 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos306] = 1;
-  return;
-}
-void parser___ReduceAction303___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 = 14395;
-  fra.me.meth = LOCATE_parser___ReduceAction303___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14408 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14408);
-    nit_exit(1);
-  }
-  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:14410 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14410);
-    nit_exit(1);
-  }
-  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:14412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14412);
-    nit_exit(1);
-  }
-  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:14414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14414);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:14416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14416);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:14421 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14421);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14423);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14434 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction303___init(val_t p0, int* init_table){
-  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction303].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos307]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 14436;
-  fra.me.meth = LOCATE_parser___ReduceAction303___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14436 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos307] = 1;
-  return;
-}
-void parser___ReduceAction304___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 = 14440;
-  fra.me.meth = LOCATE_parser___ReduceAction304___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14453 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14453);
-    nit_exit(1);
-  }
-  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:14455 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14455);
-    nit_exit(1);
-  }
-  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:14457 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14457);
-    nit_exit(1);
-  }
-  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:14459 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14459);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:14461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14461);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:14466 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14466);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14468 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14468);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14479 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction304___init(val_t p0, int* init_table){
-  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction304].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14481;
-  fra.me.meth = LOCATE_parser___ReduceAction304___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14481 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos308] = 1;
-  return;
-}
-void parser___ReduceAction305___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 = 14485;
-  fra.me.meth = LOCATE_parser___ReduceAction305___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14498);
-    nit_exit(1);
-  }
-  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:14500 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14500);
-    nit_exit(1);
-  }
-  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:14502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14502);
-    nit_exit(1);
-  }
-  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:14504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14504);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:14506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14506);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:14511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14511);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14513);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14524 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction305___init(val_t p0, int* init_table){
-  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction305].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14526;
-  fra.me.meth = LOCATE_parser___ReduceAction305___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14526 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos309] = 1;
-  return;
-}
-void parser___ReduceAction306___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 = 14530;
-  fra.me.meth = LOCATE_parser___ReduceAction306___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14544 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14544);
-    nit_exit(1);
-  }
-  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:14546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14546);
-    nit_exit(1);
-  }
-  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:14548 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14548);
-    nit_exit(1);
-  }
-  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:14550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14550);
-    nit_exit(1);
-  }
-  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:14552 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14552);
-    nit_exit(1);
-  }
-  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:14554 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14554);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:14560 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14560);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14562);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14573 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction306___init(val_t p0, int* init_table){
-  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction306].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14575;
-  fra.me.meth = LOCATE_parser___ReduceAction306___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14575 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos310] = 1;
-  return;
-}
-void parser___ReduceAction307___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 = 14579;
-  fra.me.meth = LOCATE_parser___ReduceAction307___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14592 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14592);
-    nit_exit(1);
-  }
-  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:14594 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14594);
-    nit_exit(1);
-  }
-  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:14596 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14596);
-    nit_exit(1);
-  }
-  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:14598 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14598);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:14600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14600);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:14605 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14605);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14607);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14618 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction307___init(val_t p0, int* init_table){
-  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction307].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14620;
-  fra.me.meth = LOCATE_parser___ReduceAction307___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14620 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos311] = 1;
-  return;
-}
-void parser___ReduceAction308___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 = 14624;
-  fra.me.meth = LOCATE_parser___ReduceAction308___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14638);
-    nit_exit(1);
-  }
-  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:14640 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14640);
-    nit_exit(1);
-  }
-  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:14642 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14642);
-    nit_exit(1);
-  }
-  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:14644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14644);
-    nit_exit(1);
-  }
-  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:14646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14646);
-    nit_exit(1);
-  }
-  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:14648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14648);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:14654 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14654);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14656 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14656);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14667 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction308___init(val_t p0, int* init_table){
-  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction308].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14669;
-  fra.me.meth = LOCATE_parser___ReduceAction308___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14669 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos312] = 1;
-  return;
-}
-void parser___ReduceAction309___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 = 14673;
-  fra.me.meth = LOCATE_parser___ReduceAction309___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14688 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14688);
-    nit_exit(1);
-  }
-  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:14690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14690);
-    nit_exit(1);
-  }
-  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:14692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14692);
-    nit_exit(1);
-  }
-  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:14694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14694);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:14696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14696);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:14698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14698);
-    nit_exit(1);
-  }
-  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:14700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14700);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:14707 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14707);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:14709 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14709);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14720 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction309___init(val_t p0, int* init_table){
-  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction309].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14722;
-  fra.me.meth = LOCATE_parser___ReduceAction309___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14722 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos313] = 1;
-  return;
-}
-void parser___ReduceAction310___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 = 14726;
-  fra.me.meth = LOCATE_parser___ReduceAction310___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14736 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14736);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14738);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:14744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14744);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[5]);
-  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:14750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14750);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14752 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14752);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14754);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14767 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction310___init(val_t p0, int* init_table){
-  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction310].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14769;
-  fra.me.meth = LOCATE_parser___ReduceAction310___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14769 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos314] = 1;
-  return;
-}
-void parser___ReduceAction311___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 = 14773;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14784);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14786 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14786);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  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:14792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14792);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:14794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14794);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[6], fra.me.REG[5]);
-  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:14800 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14800);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14802 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14802);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14804 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14804);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14817 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction311___init(val_t p0, int* init_table){
-  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction311].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14819;
-  fra.me.meth = LOCATE_parser___ReduceAction311___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14819 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos315] = 1;
-  return;
-}
-void parser___ReduceAction312___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 = 14823;
-  fra.me.meth = LOCATE_parser___ReduceAction312___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14832 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14832);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14834);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[5]);
-  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:14840 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14840);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14842 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14842);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14844 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14844);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], fra.me.REG[5], NIT_NULL, NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14857 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction312___init(val_t p0, int* init_table){
-  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction312].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14859;
-  fra.me.meth = LOCATE_parser___ReduceAction312___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14859 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos316] = 1;
-  return;
-}
-void parser___ReduceAction313___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 = 14863;
-  fra.me.meth = LOCATE_parser___ReduceAction313___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14874);
-    nit_exit(1);
-  }
-  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:14876 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14876);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14878 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14878);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[7], fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:14884 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14884);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[5]);
-  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:14890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14890);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14892 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14892);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14894 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14894);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14907 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction313___init(val_t p0, int* init_table){
-  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction313].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14909;
-  fra.me.meth = LOCATE_parser___ReduceAction313___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14909 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos317] = 1;
-  return;
-}
-void parser___ReduceAction314___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 = 14913;
-  fra.me.meth = LOCATE_parser___ReduceAction314___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14925);
-    nit_exit(1);
-  }
-  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:14927 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14927);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14929 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14929);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  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:14935 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14935);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:14937 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14937);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[6], fra.me.REG[5]);
-  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:14943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14943);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14945);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14947 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14947);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:14960 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction314___init(val_t p0, int* init_table){
-  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction314].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 14962;
-  fra.me.meth = LOCATE_parser___ReduceAction314___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:14962 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos318] = 1;
-  return;
-}
-void parser___ReduceAction315___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 = 14966;
-  fra.me.meth = LOCATE_parser___ReduceAction315___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:14976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14976);
-    nit_exit(1);
-  }
-  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:14978 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14978);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:14980 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14980);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[6], fra.me.REG[5]);
-  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:14986 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14986);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:14988 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14988);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:14990 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 14990);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[5], NIT_NULL, NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15003 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction315___init(val_t p0, int* init_table){
-  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction315].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15005;
-  fra.me.meth = LOCATE_parser___ReduceAction315___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15005 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos319] = 1;
-  return;
-}
-void parser___ReduceAction316___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 = 15009;
-  fra.me.meth = LOCATE_parser___ReduceAction316___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15018);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15020);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[5]);
-  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:15026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15026);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15028);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15030 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15030);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15043 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction316___init(val_t p0, int* init_table){
-  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction316].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15045;
-  fra.me.meth = LOCATE_parser___ReduceAction316___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15045 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos320] = 1;
-  return;
-}
-void parser___ReduceAction317___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 = 15049;
-  fra.me.meth = LOCATE_parser___ReduceAction317___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15059);
-    nit_exit(1);
-  }
-  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:15061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15061);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15063);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[6], fra.me.REG[5]);
-  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:15069 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15069);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15071 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15071);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15073 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15073);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15086 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction317___init(val_t p0, int* init_table){
-  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction317].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15088;
-  fra.me.meth = LOCATE_parser___ReduceAction317___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15088 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos321] = 1;
-  return;
-}
-void parser___ReduceAction318___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 = 15092;
-  fra.me.meth = LOCATE_parser___ReduceAction318___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15100 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15100);
-    nit_exit(1);
-  }
-  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:15102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15102);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15104);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15106);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[5], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15119 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction318___init(val_t p0, int* init_table){
-  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction318].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15121;
-  fra.me.meth = LOCATE_parser___ReduceAction318___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15121 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos322] = 1;
-  return;
-}
-void parser___ReduceAction319___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 = 15125;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15136);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15138 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15138);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15144);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15150 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15150);
-    nit_exit(1);
-  }
-  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:15152 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15152);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15154 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15154);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15156 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15156);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15169 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction319___init(val_t p0, int* init_table){
-  int itpos323 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction319].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15171;
-  fra.me.meth = LOCATE_parser___ReduceAction319___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15171 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos323] = 1;
-  return;
-}
-void parser___ReduceAction320___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 = 15175;
-  fra.me.meth = LOCATE_parser___ReduceAction320___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15187);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15189);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  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:15195 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15195);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15197 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15197);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15203 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15203);
-    nit_exit(1);
-  }
-  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:15205 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15205);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15207 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15207);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15209 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15209);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15222 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction320___init(val_t p0, int* init_table){
-  int itpos324 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction320].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15224;
-  fra.me.meth = LOCATE_parser___ReduceAction320___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15224 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos324] = 1;
-  return;
-}
-void parser___ReduceAction321___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 = 15228;
-  fra.me.meth = LOCATE_parser___ReduceAction321___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15238 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15238);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15240 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15240);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15246);
-    nit_exit(1);
-  }
-  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:15248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15248);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15250);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15252 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15252);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15265 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction321___init(val_t p0, int* init_table){
-  int itpos325 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction321].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15267;
-  fra.me.meth = LOCATE_parser___ReduceAction321___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15267 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos325] = 1;
-  return;
-}
-void parser___ReduceAction322___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 = 15271;
-  fra.me.meth = LOCATE_parser___ReduceAction322___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15283);
-    nit_exit(1);
-  }
-  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:15285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15285);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15287);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15293);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15299 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15299);
-    nit_exit(1);
-  }
-  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:15301 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15301);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15303 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15303);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15305 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15305);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15318 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction322___init(val_t p0, int* init_table){
-  int itpos326 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction322].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15320;
-  fra.me.meth = LOCATE_parser___ReduceAction322___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15320 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos326] = 1;
-  return;
-}
-void parser___ReduceAction323___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 = 15324;
-  fra.me.meth = LOCATE_parser___ReduceAction323___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15337);
-    nit_exit(1);
-  }
-  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:15339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15339);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15341);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  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:15347 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15347);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15349 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15349);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15355 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15355);
-    nit_exit(1);
-  }
-  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:15357 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15357);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15359);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15361 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15361);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[8], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15374 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction323___init(val_t p0, int* init_table){
-  int itpos327 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction323].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15376;
-  fra.me.meth = LOCATE_parser___ReduceAction323___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15376 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos327] = 1;
-  return;
-}
-void parser___ReduceAction324___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 = 15380;
-  fra.me.meth = LOCATE_parser___ReduceAction324___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15391);
-    nit_exit(1);
-  }
-  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:15393 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15393);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15395 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15395);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[7], fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15401 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15401);
-    nit_exit(1);
-  }
-  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:15403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15403);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15405 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15405);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15407 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15407);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15420 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction324___init(val_t p0, int* init_table){
-  int itpos328 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction324].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15422;
-  fra.me.meth = LOCATE_parser___ReduceAction324___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15422 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos328] = 1;
-  return;
-}
-void parser___ReduceAction325___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 = 15426;
-  fra.me.meth = LOCATE_parser___ReduceAction325___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15436 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15436);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15438 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15438);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15444);
-    nit_exit(1);
-  }
-  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:15446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15446);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15448 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15448);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15450 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15450);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15463 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction325___init(val_t p0, int* init_table){
-  int itpos329 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction325].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15465;
-  fra.me.meth = LOCATE_parser___ReduceAction325___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15465 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos329] = 1;
-  return;
-}
-void parser___ReduceAction326___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 = 15469;
-  fra.me.meth = LOCATE_parser___ReduceAction326___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15480);
-    nit_exit(1);
-  }
-  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:15482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15482);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15484);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15490 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15490);
-    nit_exit(1);
-  }
-  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:15492 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15492);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15494 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15494);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15496 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15496);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15509 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction326___init(val_t p0, int* init_table){
-  int itpos330 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction326].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15511;
-  fra.me.meth = LOCATE_parser___ReduceAction326___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15511 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos330] = 1;
-  return;
-}
-void parser___ReduceAction327___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 = 15515;
-  fra.me.meth = LOCATE_parser___ReduceAction327___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15524 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15524);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:15526 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15526);
-    nit_exit(1);
-  }
-  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:15528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15528);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:15530 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15530);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:15532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15532);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15545 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction327___init(val_t p0, int* init_table){
-  int itpos331 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction327].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15547;
-  fra.me.meth = LOCATE_parser___ReduceAction327___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15547 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos331] = 1;
-  return;
-}
-void parser___ReduceAction328___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 = 15551;
-  fra.me.meth = LOCATE_parser___ReduceAction328___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15562);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15564 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15564);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15570);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:15576 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15576);
-    nit_exit(1);
-  }
-  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:15578 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15578);
-    nit_exit(1);
-  }
-  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:15580 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15580);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15582);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15595 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction328___init(val_t p0, int* init_table){
-  int itpos332 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction328].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15597;
-  fra.me.meth = LOCATE_parser___ReduceAction328___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15597 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos332] = 1;
-  return;
-}
-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;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 15601;
-  fra.me.meth = LOCATE_parser___ReduceAction329___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15613 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15613);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15615 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15615);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  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:15621 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15621);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15623 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15623);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:15629 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15629);
-    nit_exit(1);
-  }
-  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:15631 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15631);
-    nit_exit(1);
-  }
-  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:15633 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15633);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15635);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15648 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction329___init(val_t p0, int* init_table){
-  int itpos333 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction329].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15650;
-  fra.me.meth = LOCATE_parser___ReduceAction329___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15650 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos333] = 1;
-  return;
-}
-void parser___ReduceAction330___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 = 15654;
-  fra.me.meth = LOCATE_parser___ReduceAction330___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15664 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15664);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15666);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[6]);
-  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:15672 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15672);
-    nit_exit(1);
-  }
-  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:15674 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15674);
-    nit_exit(1);
-  }
-  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:15676 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15676);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15678 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15678);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15691 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction330___init(val_t p0, int* init_table){
-  int itpos334 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction330].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15693;
-  fra.me.meth = LOCATE_parser___ReduceAction330___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15693 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos334] = 1;
-  return;
-}
-void parser___ReduceAction331___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 = 15697;
-  fra.me.meth = LOCATE_parser___ReduceAction331___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15709 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15709);
-    nit_exit(1);
-  }
-  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:15711 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15711);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15713 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15713);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15719 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15719);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:15725 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15725);
-    nit_exit(1);
-  }
-  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:15727 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15727);
-    nit_exit(1);
-  }
-  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:15729 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15729);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15731);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15744 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction331___init(val_t p0, int* init_table){
-  int itpos335 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction331].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15746;
-  fra.me.meth = LOCATE_parser___ReduceAction331___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15746 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos335] = 1;
-  return;
-}
-void parser___ReduceAction332___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 = 15750;
-  fra.me.meth = LOCATE_parser___ReduceAction332___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15763);
-    nit_exit(1);
-  }
-  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:15765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15765);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15767);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  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:15773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15773);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15775 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15775);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:15781 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15781);
-    nit_exit(1);
-  }
-  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:15783 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15783);
-    nit_exit(1);
-  }
-  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:15785 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15785);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15787 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15787);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[8], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15800 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction332___init(val_t p0, int* init_table){
-  int itpos336 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction332].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15802;
-  fra.me.meth = LOCATE_parser___ReduceAction332___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15802 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos336] = 1;
-  return;
-}
-void parser___ReduceAction333___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 = 15806;
-  fra.me.meth = LOCATE_parser___ReduceAction333___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15817);
-    nit_exit(1);
-  }
-  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:15819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15819);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15821);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[7], fra.me.REG[6]);
-  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:15827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15827);
-    nit_exit(1);
-  }
-  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:15829 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15829);
-    nit_exit(1);
-  }
-  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:15831 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15831);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15833 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15833);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15846 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction333___init(val_t p0, int* init_table){
-  int itpos337 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction333].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15848;
-  fra.me.meth = LOCATE_parser___ReduceAction333___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15848 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos337] = 1;
-  return;
-}
-void parser___ReduceAction334___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 = 15852;
-  fra.me.meth = LOCATE_parser___ReduceAction334___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15862 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15862);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15864);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:15870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15870);
-    nit_exit(1);
-  }
-  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:15872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15872);
-    nit_exit(1);
-  }
-  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:15874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15874);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15876 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15876);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15889 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction334___init(val_t p0, int* init_table){
-  int itpos338 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction334].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15891;
-  fra.me.meth = LOCATE_parser___ReduceAction334___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15891 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos338] = 1;
-  return;
-}
-void parser___ReduceAction335___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 = 15895;
-  fra.me.meth = LOCATE_parser___ReduceAction335___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15906 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15906);
-    nit_exit(1);
-  }
-  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:15908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15908);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15910);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:15916 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15916);
-    nit_exit(1);
-  }
-  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:15918 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15918);
-    nit_exit(1);
-  }
-  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:15920 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15920);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15922 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15922);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15935 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction335___init(val_t p0, int* init_table){
-  int itpos339 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction335].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15937;
-  fra.me.meth = LOCATE_parser___ReduceAction335___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15937 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos339] = 1;
-  return;
-}
-void parser___ReduceAction336___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 = 15941;
-  fra.me.meth = LOCATE_parser___ReduceAction336___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15950 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15950);
-    nit_exit(1);
-  }
-  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:15952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15952);
-    nit_exit(1);
-  }
-  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:15954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15954);
-    nit_exit(1);
-  }
-  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:15956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15956);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:15958 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15958);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:15971 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction336___init(val_t p0, int* init_table){
-  int itpos340 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction336].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 15973;
-  fra.me.meth = LOCATE_parser___ReduceAction336___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:15973 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos340] = 1;
-  return;
-}
-void parser___ReduceAction337___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 = 15977;
-  fra.me.meth = LOCATE_parser___ReduceAction337___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:15989 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15989);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:15991 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15991);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:15997 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 15997);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:16003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16003);
-    nit_exit(1);
-  }
-  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:16005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16005);
-    nit_exit(1);
-  }
-  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:16007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16007);
-    nit_exit(1);
-  }
-  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:16009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16009);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16011);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16024 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction337___init(val_t p0, int* init_table){
-  int itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction337].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16026;
-  fra.me.meth = LOCATE_parser___ReduceAction337___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16026 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos341] = 1;
-  return;
-}
-void parser___ReduceAction338___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 = 16030;
-  fra.me.meth = LOCATE_parser___ReduceAction338___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16043 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16043);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16045);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[9]);
-  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:16051 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16051);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16053);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:16059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16059);
-    nit_exit(1);
-  }
-  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:16061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16061);
-    nit_exit(1);
-  }
-  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:16063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16063);
-    nit_exit(1);
-  }
-  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:16065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16065);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16067);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16080 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction338___init(val_t p0, int* init_table){
-  int itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction338].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16082;
-  fra.me.meth = LOCATE_parser___ReduceAction338___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16082 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos342] = 1;
-  return;
-}
-void parser___ReduceAction339___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 = 16086;
-  fra.me.meth = LOCATE_parser___ReduceAction339___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16097 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16097);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16099 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16099);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  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:16105 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16105);
-    nit_exit(1);
-  }
-  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:16107 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16107);
-    nit_exit(1);
-  }
-  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:16109 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16109);
-    nit_exit(1);
-  }
-  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:16111 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16111);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16113);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16126 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction339___init(val_t p0, int* init_table){
-  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction339].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16128;
-  fra.me.meth = LOCATE_parser___ReduceAction339___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16128 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos343] = 1;
-  return;
-}
-void parser___ReduceAction340___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 = 16132;
-  fra.me.meth = LOCATE_parser___ReduceAction340___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16145 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16145);
-    nit_exit(1);
-  }
-  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:16147 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16147);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16149 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16149);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16155 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16155);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:16161 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16161);
-    nit_exit(1);
-  }
-  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:16163 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16163);
-    nit_exit(1);
-  }
-  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:16165 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16165);
-    nit_exit(1);
-  }
-  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:16167 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16167);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16169 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16169);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16182 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction340___init(val_t p0, int* init_table){
-  int itpos344 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction340].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16184;
-  fra.me.meth = LOCATE_parser___ReduceAction340___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16184 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos344] = 1;
-  return;
-}
-void parser___ReduceAction341___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 = 16188;
-  fra.me.meth = LOCATE_parser___ReduceAction341___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16202);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:16204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16204);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16206);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[10], fra.me.REG[9]);
-  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:16212 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16212);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16214);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:16220 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16220);
-    nit_exit(1);
-  }
-  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:16222 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16222);
-    nit_exit(1);
-  }
-  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:16224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16224);
-    nit_exit(1);
-  }
-  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:16226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16226);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16228);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16241 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction341___init(val_t p0, int* init_table){
-  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction341].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16243;
-  fra.me.meth = LOCATE_parser___ReduceAction341___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16243 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos345] = 1;
-  return;
-}
-void parser___ReduceAction342___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 = 16247;
-  fra.me.meth = LOCATE_parser___ReduceAction342___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16259 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16259);
-    nit_exit(1);
-  }
-  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:16261 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16261);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16263 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16263);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  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:16269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16269);
-    nit_exit(1);
-  }
-  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:16271 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16271);
-    nit_exit(1);
-  }
-  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:16273 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16273);
-    nit_exit(1);
-  }
-  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:16275 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16275);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16277);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16290 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction342___init(val_t p0, int* init_table){
-  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction342].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16292;
-  fra.me.meth = LOCATE_parser___ReduceAction342___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16292 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos346] = 1;
-  return;
-}
-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 = 16296;
-  fra.me.meth = LOCATE_parser___ReduceAction343___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16307);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16309 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16309);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:16315 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16315);
-    nit_exit(1);
-  }
-  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:16317 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16317);
-    nit_exit(1);
-  }
-  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:16319 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16319);
-    nit_exit(1);
-  }
-  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:16321 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16321);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16323 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16323);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16336 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction343___init(val_t p0, int* init_table){
-  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction343].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16338;
-  fra.me.meth = LOCATE_parser___ReduceAction343___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16338 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos347] = 1;
-  return;
-}
-void parser___ReduceAction344___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 = 16342;
-  fra.me.meth = LOCATE_parser___ReduceAction344___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16354 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16354);
-    nit_exit(1);
-  }
-  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:16356 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16356);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16358 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16358);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:16364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16364);
-    nit_exit(1);
-  }
-  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:16366 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16366);
-    nit_exit(1);
-  }
-  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:16368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16368);
-    nit_exit(1);
-  }
-  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:16370 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16370);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16372 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16372);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16385 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction344___init(val_t p0, int* init_table){
-  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction344].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16387;
-  fra.me.meth = LOCATE_parser___ReduceAction344___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16387 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos348] = 1;
-  return;
-}
-void parser___ReduceAction345___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 = 16391;
-  fra.me.meth = LOCATE_parser___ReduceAction345___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16401 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16401);
-    nit_exit(1);
-  }
-  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:16403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16403);
-    nit_exit(1);
-  }
-  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:16405 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16405);
-    nit_exit(1);
-  }
-  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:16407 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16407);
-    nit_exit(1);
-  }
-  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:16409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16409);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:16411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16411);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16424 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction345___init(val_t p0, int* init_table){
-  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction345].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16426;
-  fra.me.meth = LOCATE_parser___ReduceAction345___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16426 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos349] = 1;
-  return;
-}
-void parser___ReduceAction346___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 = 16430;
-  fra.me.meth = LOCATE_parser___ReduceAction346___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16443 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16443);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16445);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16451 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16451);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:16457 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16457);
-    nit_exit(1);
-  }
-  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:16459 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16459);
-    nit_exit(1);
-  }
-  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:16461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16461);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16463 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16463);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16476 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction346___init(val_t p0, int* init_table){
-  int itpos350 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction346].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16478;
-  fra.me.meth = LOCATE_parser___ReduceAction346___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16478 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos350] = 1;
-  return;
-}
-void parser___ReduceAction347___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 = 16482;
-  fra.me.meth = LOCATE_parser___ReduceAction347___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16496 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16496);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16498);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  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:16504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16504);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16506);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:16512 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16512);
-    nit_exit(1);
-  }
-  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:16514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16514);
-    nit_exit(1);
-  }
-  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:16516 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16516);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16518 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16518);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16531 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction347___init(val_t p0, int* init_table){
-  int itpos351 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction347].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16533;
-  fra.me.meth = LOCATE_parser___ReduceAction347___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16533 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos351] = 1;
-  return;
-}
-void parser___ReduceAction348___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 = 16537;
-  fra.me.meth = LOCATE_parser___ReduceAction348___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16549);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16551);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[6]);
-  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:16557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16557);
-    nit_exit(1);
-  }
-  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:16559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16559);
-    nit_exit(1);
-  }
-  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:16561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16561);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16563);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16576 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction348___init(val_t p0, int* init_table){
-  int itpos352 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction348].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16578;
-  fra.me.meth = LOCATE_parser___ReduceAction348___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16578 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos352] = 1;
-  return;
-}
-void parser___ReduceAction349___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 = 16582;
-  fra.me.meth = LOCATE_parser___ReduceAction349___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16596 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16596);
-    nit_exit(1);
-  }
-  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:16598 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16598);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16600);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16606);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:16612 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16612);
-    nit_exit(1);
-  }
-  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:16614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16614);
-    nit_exit(1);
-  }
-  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:16616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16616);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16618);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16631 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction349___init(val_t p0, int* init_table){
-  int itpos353 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction349].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16633;
-  fra.me.meth = LOCATE_parser___ReduceAction349___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16633 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos353] = 1;
-  return;
-}
-void parser___ReduceAction350___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 = 16637;
-  fra.me.meth = LOCATE_parser___ReduceAction350___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16652 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16652);
-    nit_exit(1);
-  }
-  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:16654 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16654);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16656 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16656);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  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:16662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16662);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16664 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16664);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:16670 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16670);
-    nit_exit(1);
-  }
-  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:16672 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16672);
-    nit_exit(1);
-  }
-  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:16674 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16674);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16676 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16676);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[8], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16689 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction350___init(val_t p0, int* init_table){
-  int itpos354 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction350].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16691;
-  fra.me.meth = LOCATE_parser___ReduceAction350___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16691 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos354] = 1;
-  return;
-}
-void parser___ReduceAction351___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 = 16695;
-  fra.me.meth = LOCATE_parser___ReduceAction351___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16708);
-    nit_exit(1);
-  }
-  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:16710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16710);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16712 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16712);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[7], fra.me.REG[6]);
-  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:16718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16718);
-    nit_exit(1);
-  }
-  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:16720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16720);
-    nit_exit(1);
-  }
-  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:16722 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16722);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16724);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16737 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction351___init(val_t p0, int* init_table){
-  int itpos355 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction351].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16739;
-  fra.me.meth = LOCATE_parser___ReduceAction351___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16739 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos355] = 1;
-  return;
-}
-void parser___ReduceAction352___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 = 16743;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16755 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16755);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16757 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16757);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[6]);
-  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:16763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16763);
-    nit_exit(1);
-  }
-  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:16765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16765);
-    nit_exit(1);
-  }
-  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:16767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16767);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16769);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16782 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction352___init(val_t p0, int* init_table){
-  int itpos356 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction352].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16784;
-  fra.me.meth = LOCATE_parser___ReduceAction352___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16784 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos356] = 1;
-  return;
-}
-void parser___ReduceAction353___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 = 16788;
-  fra.me.meth = LOCATE_parser___ReduceAction353___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16801 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16801);
-    nit_exit(1);
-  }
-  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:16803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16803);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16805);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[7], fra.me.REG[6]);
-  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:16811 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16811);
-    nit_exit(1);
-  }
-  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:16813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16813);
-    nit_exit(1);
-  }
-  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:16815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16815);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16817);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16830 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction353___init(val_t p0, int* init_table){
-  int itpos357 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction353].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16832;
-  fra.me.meth = LOCATE_parser___ReduceAction353___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16832 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos357] = 1;
-  return;
-}
-void parser___ReduceAction354___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 = 16836;
-  fra.me.meth = LOCATE_parser___ReduceAction354___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16847 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16847);
-    nit_exit(1);
-  }
-  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:16849 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16849);
-    nit_exit(1);
-  }
-  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:16851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16851);
-    nit_exit(1);
-  }
-  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:16853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16853);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16855);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16868 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction354___init(val_t p0, int* init_table){
-  int itpos358 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction354].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16870;
-  fra.me.meth = LOCATE_parser___ReduceAction354___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16870 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos358] = 1;
-  return;
-}
-void parser___ReduceAction355___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 = 16874;
-  fra.me.meth = LOCATE_parser___ReduceAction355___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16888);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16890);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16896 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16896);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:16902 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16902);
-    nit_exit(1);
-  }
-  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:16904 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16904);
-    nit_exit(1);
-  }
-  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:16906 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16906);
-    nit_exit(1);
-  }
-  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:16908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16908);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16910);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16923 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction355___init(val_t p0, int* init_table){
-  int itpos359 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction355].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16925;
-  fra.me.meth = LOCATE_parser___ReduceAction355___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16925 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos359] = 1;
-  return;
-}
-void parser___ReduceAction356___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 = 16929;
-  fra.me.meth = LOCATE_parser___ReduceAction356___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:16944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16944);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:16946 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16946);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[9]);
-  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:16952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16952);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:16954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16954);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:16960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16960);
-    nit_exit(1);
-  }
-  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:16962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16962);
-    nit_exit(1);
-  }
-  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:16964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16964);
-    nit_exit(1);
-  }
-  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:16966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16966);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:16968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 16968);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:16981 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction356___init(val_t p0, int* init_table){
-  int itpos360 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction356].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 16983;
-  fra.me.meth = LOCATE_parser___ReduceAction356___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:16983 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos360] = 1;
-  return;
-}
-void parser___ReduceAction357___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 = 16987;
-  fra.me.meth = LOCATE_parser___ReduceAction357___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17000 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17000);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17002);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  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:17008 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17008);
-    nit_exit(1);
-  }
-  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:17010 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17010);
-    nit_exit(1);
-  }
-  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:17012 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17012);
-    nit_exit(1);
-  }
-  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:17014 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17014);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17016 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17016);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17029 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction357___init(val_t p0, int* init_table){
-  int itpos361 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction357].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17031;
-  fra.me.meth = LOCATE_parser___ReduceAction357___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17031 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos361] = 1;
-  return;
-}
-void parser___ReduceAction358___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 = 17035;
-  fra.me.meth = LOCATE_parser___ReduceAction358___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17050);
-    nit_exit(1);
-  }
-  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:17052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17052);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17054);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17060 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17060);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:17066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17066);
-    nit_exit(1);
-  }
-  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:17068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17068);
-    nit_exit(1);
-  }
-  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:17070 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17070);
-    nit_exit(1);
-  }
-  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:17072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17072);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17074);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17087 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction358___init(val_t p0, int* init_table){
-  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction358].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17089;
-  fra.me.meth = LOCATE_parser___ReduceAction358___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17089 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos362] = 1;
-  return;
-}
-void parser___ReduceAction359___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 = 17093;
-  fra.me.meth = LOCATE_parser___ReduceAction359___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17109 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17109);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:17111 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17111);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17113);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[10], fra.me.REG[9]);
-  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:17119 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17119);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17121);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:17127 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17127);
-    nit_exit(1);
-  }
-  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:17129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17129);
-    nit_exit(1);
-  }
-  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:17131 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17131);
-    nit_exit(1);
-  }
-  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:17133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17133);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17135);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[9], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17148 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction359___init(val_t p0, int* init_table){
-  int itpos363 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction359].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17150;
-  fra.me.meth = LOCATE_parser___ReduceAction359___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17150 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos363] = 1;
-  return;
-}
-void parser___ReduceAction360___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 = 17154;
-  fra.me.meth = LOCATE_parser___ReduceAction360___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17168);
-    nit_exit(1);
-  }
-  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:17170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17170);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17172);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  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:17178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17178);
-    nit_exit(1);
-  }
-  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:17180 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17180);
-    nit_exit(1);
-  }
-  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:17182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17182);
-    nit_exit(1);
-  }
-  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:17184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17184);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17186 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17186);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17199 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction360___init(val_t p0, int* init_table){
-  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction360].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17201;
-  fra.me.meth = LOCATE_parser___ReduceAction360___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17201 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos364] = 1;
-  return;
-}
-void parser___ReduceAction361___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 = 17205;
-  fra.me.meth = LOCATE_parser___ReduceAction361___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17218 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17218);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17220 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17220);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:17226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17226);
-    nit_exit(1);
-  }
-  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:17228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17228);
-    nit_exit(1);
-  }
-  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:17230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17230);
-    nit_exit(1);
-  }
-  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:17232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17232);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17234);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17247 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction361___init(val_t p0, int* init_table){
-  int itpos365 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction361].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17249;
-  fra.me.meth = LOCATE_parser___ReduceAction361___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17249 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos365] = 1;
-  return;
-}
-void parser___ReduceAction362___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 = 17253;
-  fra.me.meth = LOCATE_parser___ReduceAction362___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17267 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17267);
-    nit_exit(1);
-  }
-  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:17269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17269);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17271 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17271);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:17277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17277);
-    nit_exit(1);
-  }
-  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:17279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17279);
-    nit_exit(1);
-  }
-  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:17281 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17281);
-    nit_exit(1);
-  }
-  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:17283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17283);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17285);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17298 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction362___init(val_t p0, int* init_table){
-  int itpos366 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction362].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17300;
-  fra.me.meth = LOCATE_parser___ReduceAction362___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17300 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos366] = 1;
-  return;
-}
-void parser___ReduceAction363___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 = 17304;
-  fra.me.meth = LOCATE_parser___ReduceAction363___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17316);
-    nit_exit(1);
-  }
-  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:17318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17318);
-    nit_exit(1);
-  }
-  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:17320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17320);
-    nit_exit(1);
-  }
-  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:17322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17322);
-    nit_exit(1);
-  }
-  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:17324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17324);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17326);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17339 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction363___init(val_t p0, int* init_table){
-  int itpos367 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction363].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17341;
-  fra.me.meth = LOCATE_parser___ReduceAction363___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17341 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos367] = 1;
-  return;
-}
-void parser___ReduceAction364___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 = 17345;
-  fra.me.meth = LOCATE_parser___ReduceAction364___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17359);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17361 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17361);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17367);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:17373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17373);
-    nit_exit(1);
-  }
-  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:17375 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17375);
-    nit_exit(1);
-  }
-  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:17377 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17377);
-    nit_exit(1);
-  }
-  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:17379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17379);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17381 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17381);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17394 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction364___init(val_t p0, int* init_table){
-  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction364].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17396;
-  fra.me.meth = LOCATE_parser___ReduceAction364___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17396 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos368] = 1;
-  return;
-}
-void parser___ReduceAction365___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 = 17400;
-  fra.me.meth = LOCATE_parser___ReduceAction365___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17415 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17415);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17417 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17417);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[9]);
-  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:17423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17423);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17425 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17425);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:17431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17431);
-    nit_exit(1);
-  }
-  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:17433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17433);
-    nit_exit(1);
-  }
-  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:17435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17435);
-    nit_exit(1);
-  }
-  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:17437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17437);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17439 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17439);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17452 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction365___init(val_t p0, int* init_table){
-  int itpos369 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction365].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17454;
-  fra.me.meth = LOCATE_parser___ReduceAction365___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17454 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos369] = 1;
-  return;
-}
-void parser___ReduceAction366___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 = 17458;
-  fra.me.meth = LOCATE_parser___ReduceAction366___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17471);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17473);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[7]);
-  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:17479 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17479);
-    nit_exit(1);
-  }
-  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:17481 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17481);
-    nit_exit(1);
-  }
-  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:17483 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17483);
-    nit_exit(1);
-  }
-  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:17485 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17485);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17487 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17487);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17500 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction366___init(val_t p0, int* init_table){
-  int itpos370 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction366].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17502;
-  fra.me.meth = LOCATE_parser___ReduceAction366___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17502 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos370] = 1;
-  return;
-}
-void parser___ReduceAction367___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 = 17506;
-  fra.me.meth = LOCATE_parser___ReduceAction367___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17521);
-    nit_exit(1);
-  }
-  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:17523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17523);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17525 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17525);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17531 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17531);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:17537 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17537);
-    nit_exit(1);
-  }
-  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:17539 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17539);
-    nit_exit(1);
-  }
-  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:17541 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17541);
-    nit_exit(1);
-  }
-  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:17543 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17543);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17545 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17545);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17558 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction367___init(val_t p0, int* init_table){
-  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction367].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17560;
-  fra.me.meth = LOCATE_parser___ReduceAction367___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17560 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos371] = 1;
-  return;
-}
-void parser___ReduceAction368___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 = 17564;
-  fra.me.meth = LOCATE_parser___ReduceAction368___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17580 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17580);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:17582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17582);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17584);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[10], fra.me.REG[9]);
-  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:17590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17590);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17592 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17592);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:17598 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17598);
-    nit_exit(1);
-  }
-  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:17600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17600);
-    nit_exit(1);
-  }
-  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:17602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17602);
-    nit_exit(1);
-  }
-  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:17604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17604);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17606);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[9], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17619 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction368___init(val_t p0, int* init_table){
-  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction368].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17621;
-  fra.me.meth = LOCATE_parser___ReduceAction368___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17621 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos372] = 1;
-  return;
-}
-void parser___ReduceAction369___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 = 17625;
-  fra.me.meth = LOCATE_parser___ReduceAction369___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17639 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17639);
-    nit_exit(1);
-  }
-  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:17641 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17641);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17643 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17643);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[8], fra.me.REG[7]);
-  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:17649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17649);
-    nit_exit(1);
-  }
-  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:17651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17651);
-    nit_exit(1);
-  }
-  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:17653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17653);
-    nit_exit(1);
-  }
-  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:17655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17655);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17657 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17657);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17670 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction369___init(val_t p0, int* init_table){
-  int itpos373 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction369].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17672;
-  fra.me.meth = LOCATE_parser___ReduceAction369___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17672 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos373] = 1;
-  return;
-}
-void parser___ReduceAction370___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 = 17676;
-  fra.me.meth = LOCATE_parser___ReduceAction370___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17689);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17691);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[7]);
-  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:17697 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17697);
-    nit_exit(1);
-  }
-  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:17699 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17699);
-    nit_exit(1);
-  }
-  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:17701 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17701);
-    nit_exit(1);
-  }
-  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:17703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17703);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17705 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17705);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17718 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction370___init(val_t p0, int* init_table){
-  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction370].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17720;
-  fra.me.meth = LOCATE_parser___ReduceAction370___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17720 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos374] = 1;
-  return;
-}
-void parser___ReduceAction371___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 = 17724;
-  fra.me.meth = LOCATE_parser___ReduceAction371___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17738);
-    nit_exit(1);
-  }
-  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:17740 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17740);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17742);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[8], fra.me.REG[7]);
-  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:17748 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17748);
-    nit_exit(1);
-  }
-  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:17750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17750);
-    nit_exit(1);
-  }
-  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:17752 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17752);
-    nit_exit(1);
-  }
-  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:17754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17754);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17756);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17769 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction371___init(val_t p0, int* init_table){
-  int itpos375 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction371].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17771;
-  fra.me.meth = LOCATE_parser___ReduceAction371___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17771 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos375] = 1;
-  return;
-}
-void parser___ReduceAction372___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 = 17775;
-  fra.me.meth = LOCATE_parser___ReduceAction372___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17787 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17787);
-    nit_exit(1);
-  }
-  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:17789 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17789);
-    nit_exit(1);
-  }
-  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:17791 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17791);
-    nit_exit(1);
-  }
-  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:17793 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17793);
-    nit_exit(1);
-  }
-  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:17795 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17795);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17797 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17797);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17810 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction372___init(val_t p0, int* init_table){
-  int itpos376 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction372].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17812;
-  fra.me.meth = LOCATE_parser___ReduceAction372___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17812 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos376] = 1;
-  return;
-}
-void parser___ReduceAction373___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 = 17816;
-  fra.me.meth = LOCATE_parser___ReduceAction373___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17831 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17831);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17833 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17833);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17839 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17839);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[8]);
-  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:17845 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17845);
-    nit_exit(1);
-  }
-  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:17847 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17847);
-    nit_exit(1);
-  }
-  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:17849 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17849);
-    nit_exit(1);
-  }
-  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:17851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17851);
-    nit_exit(1);
-  }
-  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:17853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17853);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17855);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17868 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction373___init(val_t p0, int* init_table){
-  int itpos377 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction373].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17870;
-  fra.me.meth = LOCATE_parser___ReduceAction373___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17870 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos377] = 1;
-  return;
-}
-void parser___ReduceAction374___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 = 17874;
-  fra.me.meth = LOCATE_parser___ReduceAction374___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17890);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17892 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17892);
-    nit_exit(1);
-  }
-  fra.me.REG[10] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[10]);
-  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:17898 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17898);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:17900 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17900);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[9], fra.me.REG[8]);
-  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:17906 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17906);
-    nit_exit(1);
-  }
-  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:17908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17908);
-    nit_exit(1);
-  }
-  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:17910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17910);
-    nit_exit(1);
-  }
-  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:17912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17912);
-    nit_exit(1);
-  }
-  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:17914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17914);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17916 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17916);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17929 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction374___init(val_t p0, int* init_table){
-  int itpos378 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction374].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17931;
-  fra.me.meth = LOCATE_parser___ReduceAction374___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17931 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos378] = 1;
-  return;
-}
-void parser___ReduceAction375___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 = 17935;
-  fra.me.meth = LOCATE_parser___ReduceAction375___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:17949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17949);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:17951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17951);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[8]);
-  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:17957 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17957);
-    nit_exit(1);
-  }
-  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:17959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17959);
-    nit_exit(1);
-  }
-  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:17961 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17961);
-    nit_exit(1);
-  }
-  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:17963 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17963);
-    nit_exit(1);
-  }
-  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:17965 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17965);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:17967 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 17967);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:17980 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction375___init(val_t p0, int* init_table){
-  int itpos379 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction375].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 17982;
-  fra.me.meth = LOCATE_parser___ReduceAction375___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:17982 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos379] = 1;
-  return;
-}
-void parser___ReduceAction376___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 = 17986;
-  fra.me.meth = LOCATE_parser___ReduceAction376___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18002);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:18004 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18004);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:18006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18006);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[10], fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:18012 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18012);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[8]);
-  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:18018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18018);
-    nit_exit(1);
-  }
-  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:18020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18020);
-    nit_exit(1);
-  }
-  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:18022 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18022);
-    nit_exit(1);
-  }
-  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:18024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18024);
-    nit_exit(1);
-  }
-  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:18026 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18026);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18028);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18041 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction376___init(val_t p0, int* init_table){
-  int itpos380 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18043;
-  fra.me.meth = LOCATE_parser___ReduceAction376___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18043 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos380] = 1;
-  return;
-}
-void parser___ReduceAction377___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 = 18047;
-  fra.me.meth = LOCATE_parser___ReduceAction377___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
-  fra.me.REG[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[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  /* ./parser//parser.nit:18064 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18064);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  /* ./parser//parser.nit:18066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18066);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:18068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18068);
-    nit_exit(1);
-  }
-  fra.me.REG[10] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[11], fra.me.REG[10]);
-  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:18074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18074);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:18076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18076);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[9], fra.me.REG[8]);
-  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:18082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18082);
-    nit_exit(1);
-  }
-  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:18084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18084);
-    nit_exit(1);
-  }
-  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:18086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18086);
-    nit_exit(1);
-  }
-  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:18088 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18088);
-    nit_exit(1);
-  }
-  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:18090 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18090);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18092);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[12], fra.me.REG[10], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18105 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction377___init(val_t p0, int* init_table){
-  int itpos381 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18107;
-  fra.me.meth = LOCATE_parser___ReduceAction377___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18107 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos381] = 1;
-  return;
-}
-void parser___ReduceAction378___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 = 18111;
-  fra.me.meth = LOCATE_parser___ReduceAction378___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18126 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18126);
-    nit_exit(1);
-  }
-  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:18128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18128);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
-  /* ./parser//parser.nit:18130 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18130);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[9], fra.me.REG[8]);
-  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:18136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18136);
-    nit_exit(1);
-  }
-  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:18138 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18138);
-    nit_exit(1);
-  }
-  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:18140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18140);
-    nit_exit(1);
-  }
-  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:18142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18142);
-    nit_exit(1);
-  }
-  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:18144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18144);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18146 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18146);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18159 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction378___init(val_t p0, int* init_table){
-  int itpos382 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction378].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18161;
-  fra.me.meth = LOCATE_parser___ReduceAction378___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18161 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos382] = 1;
-  return;
-}
-void parser___ReduceAction379___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 = 18165;
-  fra.me.meth = LOCATE_parser___ReduceAction379___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18179 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18179);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:18181 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18181);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[8]);
-  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:18187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18187);
-    nit_exit(1);
-  }
-  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:18189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18189);
-    nit_exit(1);
-  }
-  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:18191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18191);
-    nit_exit(1);
-  }
-  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:18193 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18193);
-    nit_exit(1);
-  }
-  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:18195 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18195);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18197 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18197);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18210 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction379___init(val_t p0, int* init_table){
-  int itpos383 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction379].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18212;
-  fra.me.meth = LOCATE_parser___ReduceAction379___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18212 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos383] = 1;
-  return;
-}
-void parser___ReduceAction380___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 = 18216;
-  fra.me.meth = LOCATE_parser___ReduceAction380___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18231 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18231);
-    nit_exit(1);
-  }
-  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:18233 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18233);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
-  /* ./parser//parser.nit:18235 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18235);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[9], fra.me.REG[8]);
-  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:18241 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18241);
-    nit_exit(1);
-  }
-  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:18243 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18243);
-    nit_exit(1);
-  }
-  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:18245 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18245);
-    nit_exit(1);
-  }
-  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:18247 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18247);
-    nit_exit(1);
-  }
-  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:18249 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18249);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18251 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18251);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18264 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction380___init(val_t p0, int* init_table){
-  int itpos384 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction380].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18266;
-  fra.me.meth = LOCATE_parser___ReduceAction380___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18266 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos384] = 1;
-  return;
-}
-void parser___ReduceAction381___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 = 18270;
-  fra.me.meth = LOCATE_parser___ReduceAction381___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18283);
-    nit_exit(1);
-  }
-  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:18285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18285);
-    nit_exit(1);
-  }
-  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:18287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18287);
-    nit_exit(1);
-  }
-  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:18289 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18289);
-    nit_exit(1);
-  }
-  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:18291 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18291);
-    nit_exit(1);
-  }
-  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:18293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18293);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18295);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18308 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction381___init(val_t p0, int* init_table){
-  int itpos385 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction381].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18310;
-  fra.me.meth = LOCATE_parser___ReduceAction381___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18310 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos385] = 1;
-  return;
-}
-void parser___ReduceAction382___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 = 18314;
-  fra.me.meth = LOCATE_parser___ReduceAction382___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18324);
-    nit_exit(1);
-  }
-  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:18326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18326);
-    nit_exit(1);
-  }
-  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:18328 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18328);
-    nit_exit(1);
-  }
-  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:18330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18330);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18332);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18343 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction382___init(val_t p0, int* init_table){
-  int itpos386 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction382].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18345;
-  fra.me.meth = LOCATE_parser___ReduceAction382___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18345 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos386] = 1;
-  return;
-}
-void parser___ReduceAction383___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 = 18349;
-  fra.me.meth = LOCATE_parser___ReduceAction383___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18360 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18360);
-    nit_exit(1);
-  }
-  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:18362 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18362);
-    nit_exit(1);
-  }
-  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:18364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18364);
-    nit_exit(1);
-  }
-  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:18366 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18366);
-    nit_exit(1);
-  }
-  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:18368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18368);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18370 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18370);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18381 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction383___init(val_t p0, int* init_table){
-  int itpos387 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction383].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18383;
-  fra.me.meth = LOCATE_parser___ReduceAction383___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18383 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos387] = 1;
-  return;
-}
-void parser___ReduceAction384___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 = 18387;
-  fra.me.meth = LOCATE_parser___ReduceAction384___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18398);
-    nit_exit(1);
-  }
-  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:18400 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18400);
-    nit_exit(1);
-  }
-  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:18402 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18402);
-    nit_exit(1);
-  }
-  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:18404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18404);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:18409 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18409);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18411);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18422 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction384___init(val_t p0, int* init_table){
-  int itpos388 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction384].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18424;
-  fra.me.meth = LOCATE_parser___ReduceAction384___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18424 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos388] = 1;
-  return;
-}
-void parser___ReduceAction385___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 = 18428;
-  fra.me.meth = LOCATE_parser___ReduceAction385___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18439 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18439);
-    nit_exit(1);
-  }
-  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:18441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18441);
-    nit_exit(1);
-  }
-  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:18443 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18443);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:18445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18445);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:18450 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18450);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18452 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18452);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18463 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction385___init(val_t p0, int* init_table){
-  int itpos389 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction385].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18465;
-  fra.me.meth = LOCATE_parser___ReduceAction385___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18465 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos389] = 1;
-  return;
-}
-void parser___ReduceAction386___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 = 18469;
-  fra.me.meth = LOCATE_parser___ReduceAction386___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18480);
-    nit_exit(1);
-  }
-  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:18482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18482);
-    nit_exit(1);
-  }
-  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:18484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18484);
-    nit_exit(1);
-  }
-  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:18486 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18486);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:18491 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18491);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18493 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18493);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18504 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction386___init(val_t p0, int* init_table){
-  int itpos390 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction386].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18506;
-  fra.me.meth = LOCATE_parser___ReduceAction386___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18506 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos390] = 1;
-  return;
-}
-void parser___ReduceAction387___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 = 18510;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18521);
-    nit_exit(1);
-  }
-  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:18523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18523);
-    nit_exit(1);
-  }
-  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:18525 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18525);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:18527 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18527);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:18532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18532);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18534 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18534);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18545 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction387___init(val_t p0, int* init_table){
-  int itpos391 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction387].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18547;
-  fra.me.meth = LOCATE_parser___ReduceAction387___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18547 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos391] = 1;
-  return;
-}
-void parser___ReduceAction388___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 = 18551;
-  fra.me.meth = LOCATE_parser___ReduceAction388___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18562);
-    nit_exit(1);
-  }
-  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:18564 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18564);
-    nit_exit(1);
-  }
-  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:18566 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18566);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:18568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18568);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:18573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18573);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18575 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18575);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18586 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction388___init(val_t p0, int* init_table){
-  int itpos392 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction388].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18588;
-  fra.me.meth = LOCATE_parser___ReduceAction388___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18588 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos392] = 1;
-  return;
-}
-void parser___ReduceAction389___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 = 18592;
-  fra.me.meth = LOCATE_parser___ReduceAction389___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18603);
-    nit_exit(1);
-  }
-  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:18605 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18605);
-    nit_exit(1);
-  }
-  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:18607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18607);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:18609 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18609);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:18614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18614);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18616);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18627 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction389___init(val_t p0, int* init_table){
-  int itpos393 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction389].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18629;
-  fra.me.meth = LOCATE_parser___ReduceAction389___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18629 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos393] = 1;
-  return;
-}
-void parser___ReduceAction390___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 = 18633;
-  fra.me.meth = LOCATE_parser___ReduceAction390___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18644);
-    nit_exit(1);
-  }
-  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:18646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18646);
-    nit_exit(1);
-  }
-  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:18648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18648);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:18650 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18650);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:18655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18655);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18657 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18657);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18668 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction390___init(val_t p0, int* init_table){
-  int itpos394 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction390].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18670;
-  fra.me.meth = LOCATE_parser___ReduceAction390___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18670 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos394] = 1;
-  return;
-}
-void parser___ReduceAction391___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 = 18674;
-  fra.me.meth = LOCATE_parser___ReduceAction391___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18685);
-    nit_exit(1);
-  }
-  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:18687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18687);
-    nit_exit(1);
-  }
-  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:18689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18689);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:18691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18691);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:18696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18696);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18698);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18709 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction391___init(val_t p0, int* init_table){
-  int itpos395 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction391].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18711;
-  fra.me.meth = LOCATE_parser___ReduceAction391___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18711 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos395] = 1;
-  return;
-}
-void parser___ReduceAction392___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 = 18715;
-  fra.me.meth = LOCATE_parser___ReduceAction392___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18726);
-    nit_exit(1);
-  }
-  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:18728 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18728);
-    nit_exit(1);
-  }
-  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:18730 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18730);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:18732 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18732);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:18737 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18737);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18739 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18739);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18750 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction392___init(val_t p0, int* init_table){
-  int itpos396 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction392].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18752;
-  fra.me.meth = LOCATE_parser___ReduceAction392___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18752 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos396] = 1;
-  return;
-}
-void parser___ReduceAction393___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 = 18756;
-  fra.me.meth = LOCATE_parser___ReduceAction393___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18767);
-    nit_exit(1);
-  }
-  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:18769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18769);
-    nit_exit(1);
-  }
-  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:18771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18771);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:18773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18773);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:18778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18778);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18780 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18780);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18791 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction393___init(val_t p0, int* init_table){
-  int itpos397 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction393].i;
-  struct {struct stack_frame_t me;} fra;
-  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 = 18793;
-  fra.me.meth = LOCATE_parser___ReduceAction393___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18793 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos397] = 1;
-  return;
-}
-void parser___ReduceAction394___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 = 18797;
-  fra.me.meth = LOCATE_parser___ReduceAction394___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18808);
-    nit_exit(1);
-  }
-  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:18810 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18810);
-    nit_exit(1);
-  }
-  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:18812 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18812);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:18814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18814);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:18819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18819);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18821);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18832 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction394___init(val_t p0, int* init_table){
-  int itpos398 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction394].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos398]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 18834;
-  fra.me.meth = LOCATE_parser___ReduceAction394___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18834 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos398] = 1;
-  return;
-}
-void parser___ReduceAction395___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 = 18838;
-  fra.me.meth = LOCATE_parser___ReduceAction395___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18849 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18849);
-    nit_exit(1);
-  }
-  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:18851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18851);
-    nit_exit(1);
-  }
-  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:18853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18853);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:18855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18855);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:18860 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18860);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18862 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18862);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18873 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction395___init(val_t p0, int* init_table){
-  int itpos399 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction395].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos399]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 18875;
-  fra.me.meth = LOCATE_parser___ReduceAction395___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18875 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos399] = 1;
-  return;
-}
-void parser___ReduceAction396___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 = 18879;
-  fra.me.meth = LOCATE_parser___ReduceAction396___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18891);
-    nit_exit(1);
-  }
-  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:18893 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18893);
-    nit_exit(1);
-  }
-  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:18895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18895);
-    nit_exit(1);
-  }
-  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:18897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18897);
-    nit_exit(1);
-  }
-  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:18899 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18899);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:18905 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18905);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18907 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18907);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18918 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction396___init(val_t p0, int* init_table){
-  int itpos400 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction396].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos400]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 18920;
-  fra.me.meth = LOCATE_parser___ReduceAction396___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18920 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos400] = 1;
-  return;
-}
-void parser___ReduceAction397___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 = 18924;
-  fra.me.meth = LOCATE_parser___ReduceAction397___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18935 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18935);
-    nit_exit(1);
-  }
-  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:18937 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18937);
-    nit_exit(1);
-  }
-  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:18939 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18939);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:18941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18941);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:18946 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18946);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18948 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18948);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:18959 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction397___init(val_t p0, int* init_table){
-  int itpos401 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction397].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos401]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 18961;
-  fra.me.meth = LOCATE_parser___ReduceAction397___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:18961 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos401] = 1;
-  return;
-}
-void parser___ReduceAction398___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 = 18965;
-  fra.me.meth = LOCATE_parser___ReduceAction398___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:18977 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18977);
-    nit_exit(1);
-  }
-  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:18979 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18979);
-    nit_exit(1);
-  }
-  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:18981 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18981);
-    nit_exit(1);
-  }
-  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:18983 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18983);
-    nit_exit(1);
-  }
-  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:18985 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18985);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:18991 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18991);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:18993 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 18993);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19004 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction398___init(val_t p0, int* init_table){
-  int itpos402 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction398].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos402]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19006;
-  fra.me.meth = LOCATE_parser___ReduceAction398___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19006 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos402] = 1;
-  return;
-}
-void parser___ReduceAction399___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 = 19010;
-  fra.me.meth = LOCATE_parser___ReduceAction399___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19023 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19023);
-    nit_exit(1);
-  }
-  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:19025 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19025);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:19027 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19027);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:19029 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19029);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:19031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19031);
-    nit_exit(1);
-  }
-  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:19033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19033);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:19040 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19040);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19042 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19042);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19053 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction399___init(val_t p0, int* init_table){
-  int itpos403 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction399].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos403]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19055;
-  fra.me.meth = LOCATE_parser___ReduceAction399___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19055 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos403] = 1;
-  return;
-}
-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 = 19059;
-  fra.me.meth = LOCATE_parser___ReduceAction400___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19071 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19071);
-    nit_exit(1);
-  }
-  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:19073 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19073);
-    nit_exit(1);
-  }
-  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:19075 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19075);
-    nit_exit(1);
-  }
-  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:19077 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19077);
-    nit_exit(1);
-  }
-  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:19079 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19079);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:19084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19084);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19086);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19097 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction400___init(val_t p0, int* init_table){
-  int itpos404 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction400].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos404]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19099;
-  fra.me.meth = LOCATE_parser___ReduceAction400___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19099 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos404] = 1;
-  return;
-}
-void parser___ReduceAction401___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 = 19103;
-  fra.me.meth = LOCATE_parser___ReduceAction401___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19115 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19115);
-    nit_exit(1);
-  }
-  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:19117 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19117);
-    nit_exit(1);
-  }
-  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:19119 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19119);
-    nit_exit(1);
-  }
-  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:19121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19121);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:19123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19123);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:19128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19128);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19130 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19130);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19141 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction401___init(val_t p0, int* init_table){
-  int itpos405 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction401].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos405]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19143;
-  fra.me.meth = LOCATE_parser___ReduceAction401___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19143 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos405] = 1;
-  return;
-}
-void parser___ReduceAction402___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 = 19147;
-  fra.me.meth = LOCATE_parser___ReduceAction402___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19159 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19159);
-    nit_exit(1);
-  }
-  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:19161 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19161);
-    nit_exit(1);
-  }
-  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:19163 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19163);
-    nit_exit(1);
-  }
-  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:19165 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19165);
-    nit_exit(1);
-  }
-  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:19167 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19167);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:19172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19172);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19174);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19185 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction402___init(val_t p0, int* init_table){
-  int itpos406 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction402].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos406]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19187;
-  fra.me.meth = LOCATE_parser___ReduceAction402___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19187 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos406] = 1;
-  return;
-}
-void parser___ReduceAction403___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 = 19191;
-  fra.me.meth = LOCATE_parser___ReduceAction403___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19203 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19203);
-    nit_exit(1);
-  }
-  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:19205 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19205);
-    nit_exit(1);
-  }
-  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:19207 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19207);
-    nit_exit(1);
-  }
-  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:19209 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19209);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:19211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19211);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:19216 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19216);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19218 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19218);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19229 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction403___init(val_t p0, int* init_table){
-  int itpos407 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction403].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos407]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19231;
-  fra.me.meth = LOCATE_parser___ReduceAction403___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19231 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos407] = 1;
-  return;
-}
-void parser___ReduceAction404___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 = 19235;
-  fra.me.meth = LOCATE_parser___ReduceAction404___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19247 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19247);
-    nit_exit(1);
-  }
-  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:19249 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19249);
-    nit_exit(1);
-  }
-  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:19251 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19251);
-    nit_exit(1);
-  }
-  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:19253 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19253);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:19255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19255);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:19260 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19260);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19262 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19262);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19273 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction404___init(val_t p0, int* init_table){
-  int itpos408 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction404].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos408]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19275;
-  fra.me.meth = LOCATE_parser___ReduceAction404___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19275 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos408] = 1;
-  return;
-}
-void parser___ReduceAction405___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 = 19279;
-  fra.me.meth = LOCATE_parser___ReduceAction405___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19291 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19291);
-    nit_exit(1);
-  }
-  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:19293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19293);
-    nit_exit(1);
-  }
-  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:19295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19295);
-    nit_exit(1);
-  }
-  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:19297 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19297);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:19299 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19299);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:19304 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19304);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19306 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19306);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19317 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction405___init(val_t p0, int* init_table){
-  int itpos409 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction405].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos409]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19319;
-  fra.me.meth = LOCATE_parser___ReduceAction405___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19319 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos409] = 1;
-  return;
-}
-void parser___ReduceAction406___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 = 19323;
-  fra.me.meth = LOCATE_parser___ReduceAction406___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19335 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19335);
-    nit_exit(1);
-  }
-  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:19337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19337);
-    nit_exit(1);
-  }
-  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:19339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19339);
-    nit_exit(1);
-  }
-  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:19341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19341);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:19343 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19343);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:19348 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19348);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19350 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19350);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19361 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction406___init(val_t p0, int* init_table){
-  int itpos410 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction406].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos410]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19363;
-  fra.me.meth = LOCATE_parser___ReduceAction406___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19363 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos410] = 1;
-  return;
-}
-void parser___ReduceAction407___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 = 19367;
-  fra.me.meth = LOCATE_parser___ReduceAction407___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19379);
-    nit_exit(1);
-  }
-  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:19381 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19381);
-    nit_exit(1);
-  }
-  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:19383 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19383);
-    nit_exit(1);
-  }
-  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:19385 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19385);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:19387 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19387);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:19392 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19392);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19394 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19394);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19405 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction407___init(val_t p0, int* init_table){
-  int itpos411 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction407].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos411]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19407;
-  fra.me.meth = LOCATE_parser___ReduceAction407___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19407 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos411] = 1;
-  return;
-}
-void parser___ReduceAction408___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 = 19411;
-  fra.me.meth = LOCATE_parser___ReduceAction408___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19423);
-    nit_exit(1);
-  }
-  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:19425 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19425);
-    nit_exit(1);
-  }
-  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:19427 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19427);
-    nit_exit(1);
-  }
-  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:19429 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19429);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:19431 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19431);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:19436 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19436);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19438 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19438);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19449 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction408___init(val_t p0, int* init_table){
-  int itpos412 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction408].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos412]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19451;
-  fra.me.meth = LOCATE_parser___ReduceAction408___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19451 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos412] = 1;
-  return;
-}
-void parser___ReduceAction409___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 = 19455;
-  fra.me.meth = LOCATE_parser___ReduceAction409___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19467 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19467);
-    nit_exit(1);
-  }
-  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:19469 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19469);
-    nit_exit(1);
-  }
-  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:19471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19471);
-    nit_exit(1);
-  }
-  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:19473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:19475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19475);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:19480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19480);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19482 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19482);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19493 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction409___init(val_t p0, int* init_table){
-  int itpos413 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction409].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos413]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19495;
-  fra.me.meth = LOCATE_parser___ReduceAction409___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19495 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos413] = 1;
-  return;
-}
-void parser___ReduceAction410___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 = 19499;
-  fra.me.meth = LOCATE_parser___ReduceAction410___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19511);
-    nit_exit(1);
-  }
-  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:19513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19513);
-    nit_exit(1);
-  }
-  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:19515 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19515);
-    nit_exit(1);
-  }
-  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:19517 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19517);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:19519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19519);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:19524 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19524);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19526 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19526);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19537 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction410___init(val_t p0, int* init_table){
-  int itpos414 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction410].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos414]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19539;
-  fra.me.meth = LOCATE_parser___ReduceAction410___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19539 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos414] = 1;
-  return;
-}
-void parser___ReduceAction411___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 = 19543;
-  fra.me.meth = LOCATE_parser___ReduceAction411___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19555);
-    nit_exit(1);
-  }
-  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:19557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19557);
-    nit_exit(1);
-  }
-  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:19559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19559);
-    nit_exit(1);
-  }
-  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:19561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19561);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:19563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19563);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:19568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19568);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19570);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19581 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction411___init(val_t p0, int* init_table){
-  int itpos415 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction411].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos415]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19583;
-  fra.me.meth = LOCATE_parser___ReduceAction411___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19583 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos415] = 1;
-  return;
-}
-void parser___ReduceAction412___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 = 19587;
-  fra.me.meth = LOCATE_parser___ReduceAction412___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19600);
-    nit_exit(1);
-  }
-  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:19602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19602);
-    nit_exit(1);
-  }
-  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:19604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19604);
-    nit_exit(1);
-  }
-  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:19606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19606);
-    nit_exit(1);
-  }
-  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:19608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19608);
-    nit_exit(1);
-  }
-  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:19610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19610);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:19616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19616);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19618);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19629 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction412___init(val_t p0, int* init_table){
-  int itpos416 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction412].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos416]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19631;
-  fra.me.meth = LOCATE_parser___ReduceAction412___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19631 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos416] = 1;
-  return;
-}
-void parser___ReduceAction413___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 = 19635;
-  fra.me.meth = LOCATE_parser___ReduceAction413___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19647);
-    nit_exit(1);
-  }
-  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:19649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19649);
-    nit_exit(1);
-  }
-  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:19651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19651);
-    nit_exit(1);
-  }
-  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:19653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19653);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:19655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19655);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:19660 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19660);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19662);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19673 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction413___init(val_t p0, int* init_table){
-  int itpos417 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction413].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos417]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19675;
-  fra.me.meth = LOCATE_parser___ReduceAction413___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19675 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos417] = 1;
-  return;
-}
-void parser___ReduceAction414___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 = 19679;
-  fra.me.meth = LOCATE_parser___ReduceAction414___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19692);
-    nit_exit(1);
-  }
-  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:19694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19694);
-    nit_exit(1);
-  }
-  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:19696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19696);
-    nit_exit(1);
-  }
-  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:19698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19698);
-    nit_exit(1);
-  }
-  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:19700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19700);
-    nit_exit(1);
-  }
-  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:19702 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19702);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:19708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19708);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19710);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19721 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction414___init(val_t p0, int* init_table){
-  int itpos418 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction414].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos418]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19723;
-  fra.me.meth = LOCATE_parser___ReduceAction414___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19723 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos418] = 1;
-  return;
-}
-void parser___ReduceAction415___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 = 19727;
-  fra.me.meth = LOCATE_parser___ReduceAction415___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19741 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19741);
-    nit_exit(1);
-  }
-  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:19743 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19743);
-    nit_exit(1);
-  }
-  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:19745 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19745);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:19747 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19747);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:19749 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19749);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:19751 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19751);
-    nit_exit(1);
-  }
-  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:19753 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19753);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:19760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19760);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19762 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19762);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19773 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction415___init(val_t p0, int* init_table){
-  int itpos419 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction415].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos419]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19775;
-  fra.me.meth = LOCATE_parser___ReduceAction415___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19775 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos419] = 1;
-  return;
-}
-void parser___ReduceAction416___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 = 19779;
-  fra.me.meth = LOCATE_parser___ReduceAction416___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19790 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19790);
-    nit_exit(1);
-  }
-  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:19792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19792);
-    nit_exit(1);
-  }
-  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:19794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19794);
-    nit_exit(1);
-  }
-  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:19796 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19796);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19798 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19798);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19809 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction416___init(val_t p0, int* init_table){
-  int itpos420 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction416].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos420]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19811;
-  fra.me.meth = LOCATE_parser___ReduceAction416___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19811 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos420] = 1;
-  return;
-}
-void parser___ReduceAction417___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 = 19815;
-  fra.me.meth = LOCATE_parser___ReduceAction417___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19827);
-    nit_exit(1);
-  }
-  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:19829 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19829);
-    nit_exit(1);
-  }
-  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:19831 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19831);
-    nit_exit(1);
-  }
-  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:19833 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19833);
-    nit_exit(1);
-  }
-  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:19835 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19835);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19837 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19837);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19848 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction417___init(val_t p0, int* init_table){
-  int itpos421 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction417].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos421]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19850;
-  fra.me.meth = LOCATE_parser___ReduceAction417___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19850 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos421] = 1;
-  return;
-}
-void parser___ReduceAction418___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 = 19854;
-  fra.me.meth = LOCATE_parser___ReduceAction418___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19866);
-    nit_exit(1);
-  }
-  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:19868 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19868);
-    nit_exit(1);
-  }
-  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:19870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19870);
-    nit_exit(1);
-  }
-  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:19872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19872);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:19877 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19877);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19879 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19879);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19890 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction418___init(val_t p0, int* init_table){
-  int itpos422 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction418].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos422]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19892;
-  fra.me.meth = LOCATE_parser___ReduceAction418___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19892 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos422] = 1;
-  return;
-}
-void parser___ReduceAction419___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 = 19896;
-  fra.me.meth = LOCATE_parser___ReduceAction419___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19908);
-    nit_exit(1);
-  }
-  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:19910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19910);
-    nit_exit(1);
-  }
-  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:19912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19912);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:19914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19914);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:19919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19919);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19921);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19932 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction419___init(val_t p0, int* init_table){
-  int itpos423 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction419].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos423]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19934;
-  fra.me.meth = LOCATE_parser___ReduceAction419___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19934 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos423] = 1;
-  return;
-}
-void parser___ReduceAction420___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 = 19938;
-  fra.me.meth = LOCATE_parser___ReduceAction420___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19950 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19950);
-    nit_exit(1);
-  }
-  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:19952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19952);
-    nit_exit(1);
-  }
-  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:19954 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19954);
-    nit_exit(1);
-  }
-  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:19956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19956);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:19961 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19961);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:19963 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19963);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:19974 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction420___init(val_t p0, int* init_table){
-  int itpos424 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction420].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos424]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 19976;
-  fra.me.meth = LOCATE_parser___ReduceAction420___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:19976 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos424] = 1;
-  return;
-}
-void parser___ReduceAction421___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 = 19980;
-  fra.me.meth = LOCATE_parser___ReduceAction421___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:19992 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19992);
-    nit_exit(1);
-  }
-  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:19994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19994);
-    nit_exit(1);
-  }
-  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:19996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19996);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:19998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 19998);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:20003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20003);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20005);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20016 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction421___init(val_t p0, int* init_table){
-  int itpos425 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction421].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos425]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20018;
-  fra.me.meth = LOCATE_parser___ReduceAction421___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20018 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos425] = 1;
-  return;
-}
-void parser___ReduceAction422___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 = 20022;
-  fra.me.meth = LOCATE_parser___ReduceAction422___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20034 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20034);
-    nit_exit(1);
-  }
-  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:20036 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20036);
-    nit_exit(1);
-  }
-  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:20038 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20038);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:20040 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20040);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:20045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20045);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20047 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20047);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20058 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction422___init(val_t p0, int* init_table){
-  int itpos426 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction422].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos426]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20060;
-  fra.me.meth = LOCATE_parser___ReduceAction422___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20060 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos426] = 1;
-  return;
-}
-void parser___ReduceAction423___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 = 20064;
-  fra.me.meth = LOCATE_parser___ReduceAction423___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20076);
-    nit_exit(1);
-  }
-  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:20078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20078);
-    nit_exit(1);
-  }
-  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:20080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20080);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:20082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20082);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:20087 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20087);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20089 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20089);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20100 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction423___init(val_t p0, int* init_table){
-  int itpos427 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction423].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos427]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20102;
-  fra.me.meth = LOCATE_parser___ReduceAction423___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20102 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos427] = 1;
-  return;
-}
-void parser___ReduceAction424___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 = 20106;
-  fra.me.meth = LOCATE_parser___ReduceAction424___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20118);
-    nit_exit(1);
-  }
-  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:20120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20120);
-    nit_exit(1);
-  }
-  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:20122 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20122);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:20124 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20124);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:20129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20129);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20131 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20131);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20142 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction424___init(val_t p0, int* init_table){
-  int itpos428 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction424].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos428]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20144;
-  fra.me.meth = LOCATE_parser___ReduceAction424___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20144 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos428] = 1;
-  return;
-}
-void parser___ReduceAction425___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 = 20148;
-  fra.me.meth = LOCATE_parser___ReduceAction425___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20160 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20160);
-    nit_exit(1);
-  }
-  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:20162 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20162);
-    nit_exit(1);
-  }
-  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:20164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20164);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:20166 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20166);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:20171 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20171);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20173);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20184 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction425___init(val_t p0, int* init_table){
-  int itpos429 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction425].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos429]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20186;
-  fra.me.meth = LOCATE_parser___ReduceAction425___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20186 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos429] = 1;
-  return;
-}
-void parser___ReduceAction426___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 = 20190;
-  fra.me.meth = LOCATE_parser___ReduceAction426___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20202);
-    nit_exit(1);
-  }
-  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:20204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20204);
-    nit_exit(1);
-  }
-  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:20206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20206);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:20208 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20208);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:20213 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20213);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20215 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20215);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20226 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction426___init(val_t p0, int* init_table){
-  int itpos430 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction426].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos430]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20228;
-  fra.me.meth = LOCATE_parser___ReduceAction426___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20228 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos430] = 1;
-  return;
-}
-void parser___ReduceAction427___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 = 20232;
-  fra.me.meth = LOCATE_parser___ReduceAction427___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20244);
-    nit_exit(1);
-  }
-  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:20246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20246);
-    nit_exit(1);
-  }
-  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:20248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20248);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:20250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20250);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:20255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20255);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20257);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20268 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction427___init(val_t p0, int* init_table){
-  int itpos431 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction427].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos431]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20270;
-  fra.me.meth = LOCATE_parser___ReduceAction427___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20270 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos431] = 1;
-  return;
-}
-void parser___ReduceAction428___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 = 20274;
-  fra.me.meth = LOCATE_parser___ReduceAction428___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20286);
-    nit_exit(1);
-  }
-  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:20288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20288);
-    nit_exit(1);
-  }
-  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:20290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20290);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:20292 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20292);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:20297 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20297);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20299 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20299);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20310 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction428___init(val_t p0, int* init_table){
-  int itpos432 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction428].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos432]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20312;
-  fra.me.meth = LOCATE_parser___ReduceAction428___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20312 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos432] = 1;
-  return;
-}
-void parser___ReduceAction429___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 = 20316;
-  fra.me.meth = LOCATE_parser___ReduceAction429___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20328 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20328);
-    nit_exit(1);
-  }
-  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:20330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20330);
-    nit_exit(1);
-  }
-  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:20332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20332);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:20334 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20334);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:20339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20339);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20341);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20352 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction429___init(val_t p0, int* init_table){
-  int itpos433 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction429].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos433]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20354;
-  fra.me.meth = LOCATE_parser___ReduceAction429___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20354 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos433] = 1;
-  return;
-}
-void parser___ReduceAction430___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 = 20358;
-  fra.me.meth = LOCATE_parser___ReduceAction430___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20371);
-    nit_exit(1);
-  }
-  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:20373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20373);
-    nit_exit(1);
-  }
-  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:20375 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20375);
-    nit_exit(1);
-  }
-  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:20377 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20377);
-    nit_exit(1);
-  }
-  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:20379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20379);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:20385 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20385);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20387 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20387);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20398 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction430___init(val_t p0, int* init_table){
-  int itpos434 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction430].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos434]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20400;
-  fra.me.meth = LOCATE_parser___ReduceAction430___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20400 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos434] = 1;
-  return;
-}
-void parser___ReduceAction431___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 = 20404;
-  fra.me.meth = LOCATE_parser___ReduceAction431___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20416);
-    nit_exit(1);
-  }
-  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:20418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20418);
-    nit_exit(1);
-  }
-  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:20420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20420);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:20422 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20422);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:20427 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20427);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20429 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20429);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20440 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction431___init(val_t p0, int* init_table){
-  int itpos435 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction431].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos435]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20442;
-  fra.me.meth = LOCATE_parser___ReduceAction431___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20442 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos435] = 1;
-  return;
-}
-void parser___ReduceAction432___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 = 20446;
-  fra.me.meth = LOCATE_parser___ReduceAction432___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20459 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20459);
-    nit_exit(1);
-  }
-  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:20461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20461);
-    nit_exit(1);
-  }
-  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:20463 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20463);
-    nit_exit(1);
-  }
-  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:20465 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20465);
-    nit_exit(1);
-  }
-  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:20467 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20467);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:20473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20475);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20486 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction432___init(val_t p0, int* init_table){
-  int itpos436 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction432].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos436]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20488;
-  fra.me.meth = LOCATE_parser___ReduceAction432___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20488 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos436] = 1;
-  return;
-}
-void parser___ReduceAction433___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 = 20492;
-  fra.me.meth = LOCATE_parser___ReduceAction433___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20506);
-    nit_exit(1);
-  }
-  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:20508 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20508);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:20510 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20510);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:20512 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20512);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:20514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20514);
-    nit_exit(1);
-  }
-  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:20516 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20516);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:20523 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20523);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20525 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20525);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20536 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction433___init(val_t p0, int* init_table){
-  int itpos437 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction433].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos437]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20538;
-  fra.me.meth = LOCATE_parser___ReduceAction433___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20538 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos437] = 1;
-  return;
-}
-void parser___ReduceAction434___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 = 20542;
-  fra.me.meth = LOCATE_parser___ReduceAction434___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20555);
-    nit_exit(1);
-  }
-  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:20557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20557);
-    nit_exit(1);
-  }
-  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:20559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20559);
-    nit_exit(1);
-  }
-  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:20561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20561);
-    nit_exit(1);
-  }
-  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:20563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20563);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:20568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20568);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20570 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20570);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20581 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction434___init(val_t p0, int* init_table){
-  int itpos438 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction434].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos438]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20583;
-  fra.me.meth = LOCATE_parser___ReduceAction434___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20583 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos438] = 1;
-  return;
-}
-void parser___ReduceAction435___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 = 20587;
-  fra.me.meth = LOCATE_parser___ReduceAction435___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20600);
-    nit_exit(1);
-  }
-  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:20602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20602);
-    nit_exit(1);
-  }
-  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:20604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20604);
-    nit_exit(1);
-  }
-  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:20606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20606);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:20608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20608);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:20613 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20613);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20615 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20615);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20626 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction435___init(val_t p0, int* init_table){
-  int itpos439 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction435].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos439]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20628;
-  fra.me.meth = LOCATE_parser___ReduceAction435___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20628 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos439] = 1;
-  return;
-}
-void parser___ReduceAction436___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 = 20632;
-  fra.me.meth = LOCATE_parser___ReduceAction436___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20645 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20645);
-    nit_exit(1);
-  }
-  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:20647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20647);
-    nit_exit(1);
-  }
-  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:20649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20649);
-    nit_exit(1);
-  }
-  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:20651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20651);
-    nit_exit(1);
-  }
-  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:20653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20653);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:20658 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20658);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20660 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20660);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20671 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction436___init(val_t p0, int* init_table){
-  int itpos440 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction436].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos440]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20673;
-  fra.me.meth = LOCATE_parser___ReduceAction436___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20673 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos440] = 1;
-  return;
-}
-void parser___ReduceAction437___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 = 20677;
-  fra.me.meth = LOCATE_parser___ReduceAction437___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20690);
-    nit_exit(1);
-  }
-  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:20692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20692);
-    nit_exit(1);
-  }
-  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:20694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20694);
-    nit_exit(1);
-  }
-  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:20696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20696);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:20698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20698);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:20703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20703);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20705 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20705);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20716 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction437___init(val_t p0, int* init_table){
-  int itpos441 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction437].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos441]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20718;
-  fra.me.meth = LOCATE_parser___ReduceAction437___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20718 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos441] = 1;
-  return;
-}
-void parser___ReduceAction438___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 = 20722;
-  fra.me.meth = LOCATE_parser___ReduceAction438___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20735 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20735);
-    nit_exit(1);
-  }
-  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:20737 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20737);
-    nit_exit(1);
-  }
-  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:20739 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20739);
-    nit_exit(1);
-  }
-  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:20741 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20741);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:20743 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20743);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:20748 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20748);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20750);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20761 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction438___init(val_t p0, int* init_table){
-  int itpos442 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction438].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos442]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20763;
-  fra.me.meth = LOCATE_parser___ReduceAction438___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20763 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos442] = 1;
-  return;
-}
-void parser___ReduceAction439___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 = 20767;
-  fra.me.meth = LOCATE_parser___ReduceAction439___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20780 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20780);
-    nit_exit(1);
-  }
-  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:20782 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20782);
-    nit_exit(1);
-  }
-  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:20784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20784);
-    nit_exit(1);
-  }
-  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:20786 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20786);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:20788 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20788);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:20793 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20793);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20795 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20795);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20806 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction439___init(val_t p0, int* init_table){
-  int itpos443 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction439].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos443]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20808;
-  fra.me.meth = LOCATE_parser___ReduceAction439___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20808 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos443] = 1;
-  return;
-}
-void parser___ReduceAction440___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 = 20812;
-  fra.me.meth = LOCATE_parser___ReduceAction440___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20825 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20825);
-    nit_exit(1);
-  }
-  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:20827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20827);
-    nit_exit(1);
-  }
-  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:20829 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20829);
-    nit_exit(1);
-  }
-  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:20831 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20831);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:20833 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20833);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:20838 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20838);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20840 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20840);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20851 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction440___init(val_t p0, int* init_table){
-  int itpos444 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction440].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos444]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20853;
-  fra.me.meth = LOCATE_parser___ReduceAction440___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20853 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos444] = 1;
-  return;
-}
-void parser___ReduceAction441___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 = 20857;
-  fra.me.meth = LOCATE_parser___ReduceAction441___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20870 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20870);
-    nit_exit(1);
-  }
-  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:20872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20872);
-    nit_exit(1);
-  }
-  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:20874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20874);
-    nit_exit(1);
-  }
-  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:20876 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20876);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:20878 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20878);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:20883 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20883);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20885 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20885);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20896 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction441___init(val_t p0, int* init_table){
-  int itpos445 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction441].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos445]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20898;
-  fra.me.meth = LOCATE_parser___ReduceAction441___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20898 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos445] = 1;
-  return;
-}
-void parser___ReduceAction442___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 = 20902;
-  fra.me.meth = LOCATE_parser___ReduceAction442___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20915 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20915);
-    nit_exit(1);
-  }
-  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:20917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20917);
-    nit_exit(1);
-  }
-  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:20919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20919);
-    nit_exit(1);
-  }
-  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:20921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20921);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:20923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20923);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:20928 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20928);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20930);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20941 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction442___init(val_t p0, int* init_table){
-  int itpos446 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction442].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos446]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20943;
-  fra.me.meth = LOCATE_parser___ReduceAction442___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20943 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos446] = 1;
-  return;
-}
-void parser___ReduceAction443___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 = 20947;
-  fra.me.meth = LOCATE_parser___ReduceAction443___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:20960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20960);
-    nit_exit(1);
-  }
-  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:20962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20962);
-    nit_exit(1);
-  }
-  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:20964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20964);
-    nit_exit(1);
-  }
-  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:20966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20966);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:20968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20968);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:20973 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20973);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:20975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 20975);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:20986 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction443___init(val_t p0, int* init_table){
-  int itpos447 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction443].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos447]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 20988;
-  fra.me.meth = LOCATE_parser___ReduceAction443___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:20988 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos447] = 1;
-  return;
-}
-void parser___ReduceAction444___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 = 20992;
-  fra.me.meth = LOCATE_parser___ReduceAction444___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21005);
-    nit_exit(1);
-  }
-  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:21007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21007);
-    nit_exit(1);
-  }
-  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:21009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21009);
-    nit_exit(1);
-  }
-  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:21011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21011);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:21013 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21013);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:21018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21018);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21020);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21031 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction444___init(val_t p0, int* init_table){
-  int itpos448 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction444].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos448]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21033;
-  fra.me.meth = LOCATE_parser___ReduceAction444___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21033 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos448] = 1;
-  return;
-}
-void parser___ReduceAction445___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 = 21037;
-  fra.me.meth = LOCATE_parser___ReduceAction445___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21050);
-    nit_exit(1);
-  }
-  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:21052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21052);
-    nit_exit(1);
-  }
-  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:21054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21054);
-    nit_exit(1);
-  }
-  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:21056 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21056);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:21058 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21058);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:21063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21063);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21065);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21076 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction445___init(val_t p0, int* init_table){
-  int itpos449 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction445].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos449]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21078;
-  fra.me.meth = LOCATE_parser___ReduceAction445___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21078 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos449] = 1;
-  return;
-}
-void parser___ReduceAction446___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 = 21082;
-  fra.me.meth = LOCATE_parser___ReduceAction446___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21096 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21096);
-    nit_exit(1);
-  }
-  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:21098 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21098);
-    nit_exit(1);
-  }
-  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:21100 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21100);
-    nit_exit(1);
-  }
-  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:21102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21102);
-    nit_exit(1);
-  }
-  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:21104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21104);
-    nit_exit(1);
-  }
-  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:21106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21106);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:21112 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21112);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21114);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21125 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction446___init(val_t p0, int* init_table){
-  int itpos450 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction446].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos450]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21127;
-  fra.me.meth = LOCATE_parser___ReduceAction446___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21127 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos450] = 1;
-  return;
-}
-void parser___ReduceAction447___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 = 21131;
-  fra.me.meth = LOCATE_parser___ReduceAction447___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21144);
-    nit_exit(1);
-  }
-  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:21146 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21146);
-    nit_exit(1);
-  }
-  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:21148 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21148);
-    nit_exit(1);
-  }
-  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:21150 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21150);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:21152 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21152);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:21157 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21157);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21159 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21159);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21170 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction447___init(val_t p0, int* init_table){
-  int itpos451 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction447].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos451]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21172;
-  fra.me.meth = LOCATE_parser___ReduceAction447___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21172 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos451] = 1;
-  return;
-}
-void parser___ReduceAction448___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 = 21176;
-  fra.me.meth = LOCATE_parser___ReduceAction448___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21190 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21190);
-    nit_exit(1);
-  }
-  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:21192 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21192);
-    nit_exit(1);
-  }
-  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:21194 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21194);
-    nit_exit(1);
-  }
-  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:21196 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21196);
-    nit_exit(1);
-  }
-  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:21198 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21198);
-    nit_exit(1);
-  }
-  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:21200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21200);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:21206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21206);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21208 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21208);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21219 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction448___init(val_t p0, int* init_table){
-  int itpos452 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction448].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos452]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21221;
-  fra.me.meth = LOCATE_parser___ReduceAction448___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21221 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos452] = 1;
-  return;
-}
-void parser___ReduceAction449___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 = 21225;
-  fra.me.meth = LOCATE_parser___ReduceAction449___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21240 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21240);
-    nit_exit(1);
-  }
-  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:21242 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21242);
-    nit_exit(1);
-  }
-  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:21244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21244);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:21246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21246);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:21248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21248);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:21250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21250);
-    nit_exit(1);
-  }
-  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:21252 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21252);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:21259 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21259);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21261 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21261);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21272 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction449___init(val_t p0, int* init_table){
-  int itpos453 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction449].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos453]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21274;
-  fra.me.meth = LOCATE_parser___ReduceAction449___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21274 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos453] = 1;
-  return;
-}
-void parser___ReduceAction450___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 = 21278;
-  fra.me.meth = LOCATE_parser___ReduceAction450___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21287);
-    nit_exit(1);
-  }
-  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:21289 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21289);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
-  /* ./parser//parser.nit:21291 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21291);
-    nit_exit(1);
-  }
-  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:21293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21293);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21295);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21305 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction450___init(val_t p0, int* init_table){
-  int itpos454 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction450].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos454]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21307;
-  fra.me.meth = LOCATE_parser___ReduceAction450___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21307 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos454] = 1;
-  return;
-}
-void parser___ReduceAction451___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 = 21311;
-  fra.me.meth = LOCATE_parser___ReduceAction451___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21321 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21321);
-    nit_exit(1);
-  }
-  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:21323 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21323);
-    nit_exit(1);
-  }
-  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:21325 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21325);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
-  /* ./parser//parser.nit:21327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21327);
-    nit_exit(1);
-  }
-  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:21329 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21329);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21331 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21331);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(12);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21341 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction451___init(val_t p0, int* init_table){
-  int itpos455 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction451].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos455]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21343;
-  fra.me.meth = LOCATE_parser___ReduceAction451___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21343 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos455] = 1;
-  return;
-}
-void parser___ReduceAction452___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 = 21347;
-  fra.me.meth = LOCATE_parser___ReduceAction452___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(13);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21353 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction452___init(val_t p0, int* init_table){
-  int itpos456 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction452].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos456]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21355;
-  fra.me.meth = LOCATE_parser___ReduceAction452___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21355 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos456] = 1;
-  return;
-}
-void parser___ReduceAction453___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 = 21359;
-  fra.me.meth = LOCATE_parser___ReduceAction453___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
-  /* ./parser//parser.nit:21365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21365);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(13);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21370 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction453___init(val_t p0, int* init_table){
-  int itpos457 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction453].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos457]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21372;
-  fra.me.meth = LOCATE_parser___ReduceAction453___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21372 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos457] = 1;
-  return;
-}
-void parser___ReduceAction454___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 = 21376;
-  fra.me.meth = LOCATE_parser___ReduceAction454___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
-  /* ./parser//parser.nit:21382 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21382);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(13);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21387 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction454___init(val_t p0, int* init_table){
-  int itpos458 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction454].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos458]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21389;
-  fra.me.meth = LOCATE_parser___ReduceAction454___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21389 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos458] = 1;
-  return;
-}
-void parser___ReduceAction455___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 = 21393;
-  fra.me.meth = LOCATE_parser___ReduceAction455___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
-  /* ./parser//parser.nit:21399 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21399);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(13);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21404 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction455___init(val_t p0, int* init_table){
-  int itpos459 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction455].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos459]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21406;
-  fra.me.meth = LOCATE_parser___ReduceAction455___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21406 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos459] = 1;
-  return;
-}
-void parser___ReduceAction456___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 = 21410;
-  fra.me.meth = LOCATE_parser___ReduceAction456___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:21418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21418);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21420);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:21422 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:21423 */
-  } else {
-    /* ./parser//parser.nit:21425 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21434 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction456___init(val_t p0, int* init_table){
-  int itpos460 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction456].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos460]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21436;
-  fra.me.meth = LOCATE_parser___ReduceAction456___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21436 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos460] = 1;
-  return;
-}
-void parser___ReduceAction457___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 = 21440;
-  fra.me.meth = LOCATE_parser___ReduceAction457___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:21449 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21449);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:21451 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:21452 */
-  } else {
-    /* ./parser//parser.nit:21454 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  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:21458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21458);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21460 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21460);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:21462 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:21463 */
-  } else {
-    /* ./parser//parser.nit:21465 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21474 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction457___init(val_t p0, int* init_table){
-  int itpos461 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction457].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos461]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21476;
-  fra.me.meth = LOCATE_parser___ReduceAction457___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21476 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos461] = 1;
-  return;
-}
-void parser___ReduceAction458___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 = 21480;
-  fra.me.meth = LOCATE_parser___ReduceAction458___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21488 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21488);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21495 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction458___init(val_t p0, int* init_table){
-  int itpos462 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction458].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos462]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21497;
-  fra.me.meth = LOCATE_parser___ReduceAction458___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21497 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos462] = 1;
-  return;
-}
-void parser___ReduceAction459___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 = 21501;
-  fra.me.meth = LOCATE_parser___ReduceAction459___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:21510 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21510);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:21512 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:21513 */
-  } else {
-    /* ./parser//parser.nit:21515 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21519);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[2], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21526 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction459___init(val_t p0, int* init_table){
-  int itpos463 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction459].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos463]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21528;
-  fra.me.meth = LOCATE_parser___ReduceAction459___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21528 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos463] = 1;
-  return;
-}
-void parser___ReduceAction460___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 = 21532;
-  fra.me.meth = LOCATE_parser___ReduceAction460___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21539 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21539);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:21541 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:21542 */
-  } else {
-    /* ./parser//parser.nit:21544 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21553 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction460___init(val_t p0, int* init_table){
-  int itpos464 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction460].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos464]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21555;
-  fra.me.meth = LOCATE_parser___ReduceAction460___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21555 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos464] = 1;
-  return;
-}
-void parser___ReduceAction461___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 = 21559;
-  fra.me.meth = LOCATE_parser___ReduceAction461___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:21567 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21567);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:21569 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:21570 */
-  } else {
-    /* ./parser//parser.nit:21572 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21576 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21576);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:21578 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:21579 */
-  } else {
-    /* ./parser//parser.nit:21581 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21590 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction461___init(val_t p0, int* init_table){
-  int itpos465 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction461].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos465]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21592;
-  fra.me.meth = LOCATE_parser___ReduceAction461___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21592 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos465] = 1;
-  return;
-}
-void parser___ReduceAction462___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 = 21596;
-  fra.me.meth = LOCATE_parser___ReduceAction462___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[2], NIT_NULL, fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21608 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction462___init(val_t p0, int* init_table){
-  int itpos466 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction462].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos466]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21610;
-  fra.me.meth = LOCATE_parser___ReduceAction462___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21610 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos466] = 1;
-  return;
-}
-void parser___ReduceAction463___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 = 21614;
-  fra.me.meth = LOCATE_parser___ReduceAction463___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21622);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:21624 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:21625 */
-  } else {
-    /* ./parser//parser.nit:21627 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(14);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21636 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction463___init(val_t p0, int* init_table){
-  int itpos467 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction463].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos467]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21638;
-  fra.me.meth = LOCATE_parser___ReduceAction463___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21638 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos467] = 1;
-  return;
-}
-void parser___ReduceAction464___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 = 21642;
-  fra.me.meth = LOCATE_parser___ReduceAction464___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[2], NIT_NULL, fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(15);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21653 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction464___init(val_t p0, int* init_table){
-  int itpos468 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction464].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos468]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21655;
-  fra.me.meth = LOCATE_parser___ReduceAction464___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21655 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos468] = 1;
-  return;
-}
-void parser___ReduceAction465___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 = 21659;
-  fra.me.meth = LOCATE_parser___ReduceAction465___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21666);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:21668 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:21669 */
-  } else {
-    /* ./parser//parser.nit:21671 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(15);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21680 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction465___init(val_t p0, int* init_table){
-  int itpos469 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction465].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos469]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21682;
-  fra.me.meth = LOCATE_parser___ReduceAction465___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21682 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos469] = 1;
-  return;
-}
-void parser___ReduceAction466___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 = 21686;
-  fra.me.meth = LOCATE_parser___ReduceAction466___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21693);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(15);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21700 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction466___init(val_t p0, int* init_table){
-  int itpos470 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction466].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos470]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21702;
-  fra.me.meth = LOCATE_parser___ReduceAction466___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21702 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos470] = 1;
-  return;
-}
-void parser___ReduceAction467___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 = 21706;
-  fra.me.meth = LOCATE_parser___ReduceAction467___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:21714 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21714);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:21716 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:21717 */
-  } else {
-    /* ./parser//parser.nit:21719 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21723 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21723);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[2], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(15);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21730 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction467___init(val_t p0, int* init_table){
-  int itpos471 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction467].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos471]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21732;
-  fra.me.meth = LOCATE_parser___ReduceAction467___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21732 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos471] = 1;
-  return;
-}
-void parser___ReduceAction468___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21736;
-  fra.me.meth = LOCATE_parser___ReduceAction468___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast nullable AParam*/;
-  /* ./parser//parser.nit:21746 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21746);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:21747 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:21748 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(16);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21751 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction468___init(val_t p0, int* init_table){
-  int itpos472 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction468].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos472]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21753;
-  fra.me.meth = LOCATE_parser___ReduceAction468___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21753 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos472] = 1;
-  return;
-}
-void parser___ReduceAction469___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 = 21757;
-  fra.me.meth = LOCATE_parser___ReduceAction469___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AParam, ID_AParam)) /*cast nullable AParam*/;
-  /* ./parser//parser.nit:21768 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21768);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21770 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21770);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:21771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:21772 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:21775 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:21776 */
-  } else {
-    /* ./parser//parser.nit:21778 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(16);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21782 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction469___init(val_t p0, int* init_table){
-  int itpos473 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction469].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos473]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21784;
-  fra.me.meth = LOCATE_parser___ReduceAction469___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21784 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos473] = 1;
-  return;
-}
-void parser___ReduceAction470___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 = 21788;
-  fra.me.meth = LOCATE_parser___ReduceAction470___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(16);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21796 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction470___init(val_t p0, int* init_table){
-  int itpos474 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction470].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos474]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21798;
-  fra.me.meth = LOCATE_parser___ReduceAction470___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21798 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos474] = 1;
-  return;
-}
-void parser___ReduceAction471___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 = 21802;
-  fra.me.meth = LOCATE_parser___ReduceAction471___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast nullable AParam*/;
-  /* ./parser//parser.nit:21809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21809);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(17);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21811 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction471___init(val_t p0, int* init_table){
-  int itpos475 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction471].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos475]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21813;
-  fra.me.meth = LOCATE_parser___ReduceAction471___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21813 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos475] = 1;
-  return;
-}
-void parser___ReduceAction472___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 = 21817;
-  fra.me.meth = LOCATE_parser___ReduceAction472___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:21822 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21822);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(18);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21829 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction472___init(val_t p0, int* init_table){
-  int itpos476 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction472].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos476]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21831;
-  fra.me.meth = LOCATE_parser___ReduceAction472___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21831 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos476] = 1;
-  return;
-}
-void parser___ReduceAction473___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 = 21835;
-  fra.me.meth = LOCATE_parser___ReduceAction473___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21841 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21841);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:21843 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21843);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(18);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21850 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction473___init(val_t p0, int* init_table){
-  int itpos477 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction473].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos477]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21852;
-  fra.me.meth = LOCATE_parser___ReduceAction473___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21852 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos477] = 1;
-  return;
-}
-void parser___ReduceAction474___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 = 21856;
-  fra.me.meth = LOCATE_parser___ReduceAction474___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21863 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21863);
-    nit_exit(1);
-  }
-  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:21865 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21865);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
-  /* ./parser//parser.nit:21867 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21867);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(18);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21874 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction474___init(val_t p0, int* init_table){
-  int itpos478 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction474].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos478]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21876;
-  fra.me.meth = LOCATE_parser___ReduceAction474___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21876 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos478] = 1;
-  return;
-}
-void parser___ReduceAction475___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 = 21880;
-  fra.me.meth = LOCATE_parser___ReduceAction475___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:21887 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21887);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:21889 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:21890 */
-  } else {
-    /* ./parser//parser.nit:21892 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(19);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21896 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction475___init(val_t p0, int* init_table){
-  int itpos479 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction475].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos479]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21898;
-  fra.me.meth = LOCATE_parser___ReduceAction475___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21898 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos479] = 1;
-  return;
-}
-void parser___ReduceAction476___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 = 21902;
-  fra.me.meth = LOCATE_parser___ReduceAction476___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:21910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21910);
-    nit_exit(1);
-  }
-  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:21912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21912);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:21914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21914);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21923 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction476___init(val_t p0, int* init_table){
-  int itpos480 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction476].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos480]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21925;
-  fra.me.meth = LOCATE_parser___ReduceAction476___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21925 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos480] = 1;
-  return;
-}
-void parser___ReduceAction477___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 = 21929;
-  fra.me.meth = LOCATE_parser___ReduceAction477___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21938);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:21940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21940);
-    nit_exit(1);
-  }
-  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:21942 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21942);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:21944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21944);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21953 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction477___init(val_t p0, int* init_table){
-  int itpos481 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction477].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos481]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21955;
-  fra.me.meth = LOCATE_parser___ReduceAction477___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21955 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos481] = 1;
-  return;
-}
-void parser___ReduceAction478___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 = 21959;
-  fra.me.meth = LOCATE_parser___ReduceAction478___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:21969 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21969);
-    nit_exit(1);
-  }
-  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:21971 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21971);
-    nit_exit(1);
-  }
-  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:21973 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21973);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:21975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 21975);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:21984 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction478___init(val_t p0, int* init_table){
-  int itpos482 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction478].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos482]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 21986;
-  fra.me.meth = LOCATE_parser___ReduceAction478___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:21986 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos482] = 1;
-  return;
-}
-void parser___ReduceAction479___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 = 21990;
-  fra.me.meth = LOCATE_parser___ReduceAction479___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22001 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22001);
-    nit_exit(1);
-  }
-  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:22003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22003);
-    nit_exit(1);
-  }
-  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:22005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22005);
-    nit_exit(1);
-  }
-  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:22007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22007);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22009);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22018 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction479___init(val_t p0, int* init_table){
-  int itpos483 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction479].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos483]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22020;
-  fra.me.meth = LOCATE_parser___ReduceAction479___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22020 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos483] = 1;
-  return;
-}
-void parser___ReduceAction480___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 = 22024;
-  fra.me.meth = LOCATE_parser___ReduceAction480___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22035 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22035);
-    nit_exit(1);
-  }
-  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:22037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22037);
-    nit_exit(1);
-  }
-  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:22039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22039);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22041 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22041);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22050 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction480___init(val_t p0, int* init_table){
-  int itpos484 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction480].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos484]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22052;
-  fra.me.meth = LOCATE_parser___ReduceAction480___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22052 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos484] = 1;
-  return;
-}
-void parser___ReduceAction481___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 = 22056;
-  fra.me.meth = LOCATE_parser___ReduceAction481___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22068);
-    nit_exit(1);
-  }
-  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:22070 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22070);
-    nit_exit(1);
-  }
-  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:22072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22072);
-    nit_exit(1);
-  }
-  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:22074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22074);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22076);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(20);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22085 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction481___init(val_t p0, int* init_table){
-  int itpos485 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction481].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos485]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22087;
-  fra.me.meth = LOCATE_parser___ReduceAction481___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22087 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos485] = 1;
-  return;
-}
-void parser___ReduceAction482___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 = 22091;
-  fra.me.meth = LOCATE_parser___ReduceAction482___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22096 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22096);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(21);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22102 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction482___init(val_t p0, int* init_table){
-  int itpos486 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction482].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos486]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22104;
-  fra.me.meth = LOCATE_parser___ReduceAction482___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22104 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos486] = 1;
-  return;
-}
-void parser___ReduceAction483___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 = 22108;
-  fra.me.meth = LOCATE_parser___ReduceAction483___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:22114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22114);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(22);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22121 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction483___init(val_t p0, int* init_table){
-  int itpos487 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction483].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos487]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22123;
-  fra.me.meth = LOCATE_parser___ReduceAction483___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22123 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos487] = 1;
-  return;
-}
-void parser___ReduceAction484___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 = 22127;
-  fra.me.meth = LOCATE_parser___ReduceAction484___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:22134 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22134);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:22136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22136);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(22);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22143 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction484___init(val_t p0, int* init_table){
-  int itpos488 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction484].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos488]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22145;
-  fra.me.meth = LOCATE_parser___ReduceAction484___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22145 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos488] = 1;
-  return;
-}
-void parser___ReduceAction485___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 = 22149;
-  fra.me.meth = LOCATE_parser___ReduceAction485___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:22160 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22160);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22162 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22162);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22164 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22165 */
-  } else {
-    /* ./parser//parser.nit:22167 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(22);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22176 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction485___init(val_t p0, int* init_table){
-  int itpos489 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction485].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos489]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22178;
-  fra.me.meth = LOCATE_parser___ReduceAction485___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22178 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos489] = 1;
-  return;
-}
-void parser___ReduceAction486___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 = 22182;
-  fra.me.meth = LOCATE_parser___ReduceAction486___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:22194 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22194);
-    nit_exit(1);
-  }
-  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:22196 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22196);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22198 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22198);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:22200 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:22201 */
-  } else {
-    /* ./parser//parser.nit:22203 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(22);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22212 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction486___init(val_t p0, int* init_table){
-  int itpos490 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction486].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos490]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22214;
-  fra.me.meth = LOCATE_parser___ReduceAction486___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22214 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos490] = 1;
-  return;
-}
-void parser___ReduceAction487___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22218;
-  fra.me.meth = LOCATE_parser___ReduceAction487___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:22224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22224);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:22225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:22226 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(23);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22229 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction487___init(val_t p0, int* init_table){
-  int itpos491 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction487].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos491]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22231;
-  fra.me.meth = LOCATE_parser___ReduceAction487___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22231 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos491] = 1;
-  return;
-}
-void parser___ReduceAction488___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 = 22235;
-  fra.me.meth = LOCATE_parser___ReduceAction488___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:22242 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22242);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22244);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:22245 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:22246 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22249 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22250 */
-  } else {
-    /* ./parser//parser.nit:22252 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(23);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22256 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction488___init(val_t p0, int* init_table){
-  int itpos492 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction488].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos492]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22258;
-  fra.me.meth = LOCATE_parser___ReduceAction488___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22258 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos492] = 1;
-  return;
-}
-void parser___ReduceAction489___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 = 22262;
-  fra.me.meth = LOCATE_parser___ReduceAction489___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:22269 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22269);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(24);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22271 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction489___init(val_t p0, int* init_table){
-  int itpos493 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction489].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos493]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22273;
-  fra.me.meth = LOCATE_parser___ReduceAction489___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22273 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos493] = 1;
-  return;
-}
-void parser___ReduceAction490___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 = 22277;
-  fra.me.meth = LOCATE_parser___ReduceAction490___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:22284 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22284);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(25);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22286 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction490___init(val_t p0, int* init_table){
-  int itpos494 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction490].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos494]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22288;
-  fra.me.meth = LOCATE_parser___ReduceAction490___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22288 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos494] = 1;
-  return;
-}
-void parser___ReduceAction491___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22292;
-  fra.me.meth = LOCATE_parser___ReduceAction491___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22301 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22301);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:22302 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:22303 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(26);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22309 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction491___init(val_t p0, int* init_table){
-  int itpos495 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction491].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos495]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22311;
-  fra.me.meth = LOCATE_parser___ReduceAction491___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22311 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos495] = 1;
-  return;
-}
-void parser___ReduceAction492___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 = 22315;
-  fra.me.meth = LOCATE_parser___ReduceAction492___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:22325 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22325);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22327);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:22328 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:22329 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22332 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22333 */
-  } else {
-    /* ./parser//parser.nit:22335 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(26);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22342 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction492___init(val_t p0, int* init_table){
-  int itpos496 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction492].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos496]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22344;
-  fra.me.meth = LOCATE_parser___ReduceAction492___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22344 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos496] = 1;
-  return;
-}
-void parser___ReduceAction493___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 = 22348;
-  fra.me.meth = LOCATE_parser___ReduceAction493___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[2] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(26);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22358 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction493___init(val_t p0, int* init_table){
-  int itpos497 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction493].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos497]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22360;
-  fra.me.meth = LOCATE_parser___ReduceAction493___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22360 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos497] = 1;
-  return;
-}
-void parser___ReduceAction494___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 = 22364;
-  fra.me.meth = LOCATE_parser___ReduceAction494___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[2] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(26);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22373 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction494___init(val_t p0, int* init_table){
-  int itpos498 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction494].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos498]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22375;
-  fra.me.meth = LOCATE_parser___ReduceAction494___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22375 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos498] = 1;
-  return;
-}
-void parser___ReduceAction495___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 = 22379;
-  fra.me.meth = LOCATE_parser___ReduceAction495___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22384 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22384);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(26);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22386 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction495___init(val_t p0, int* init_table){
-  int itpos499 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction495].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos499]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22388;
-  fra.me.meth = LOCATE_parser___ReduceAction495___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22388 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos499] = 1;
-  return;
-}
-void parser___ReduceAction496___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 = 22392;
-  fra.me.meth = LOCATE_parser___ReduceAction496___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22398);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(27);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22400 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction496___init(val_t p0, int* init_table){
-  int itpos500 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction496].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos500]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22402;
-  fra.me.meth = LOCATE_parser___ReduceAction496___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22402 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos500] = 1;
-  return;
-}
-void parser___ReduceAction497___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 = 22406;
-  fra.me.meth = LOCATE_parser___ReduceAction497___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22411);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22413 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction497___init(val_t p0, int* init_table){
-  int itpos501 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction497].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos501]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22415;
-  fra.me.meth = LOCATE_parser___ReduceAction497___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22415 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos501] = 1;
-  return;
-}
-void parser___ReduceAction498___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 = 22419;
-  fra.me.meth = LOCATE_parser___ReduceAction498___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22424 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22424);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22426 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction498___init(val_t p0, int* init_table){
-  int itpos502 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction498].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos502]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22428;
-  fra.me.meth = LOCATE_parser___ReduceAction498___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22428 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos502] = 1;
-  return;
-}
-void parser___ReduceAction499___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 = 22432;
-  fra.me.meth = LOCATE_parser___ReduceAction499___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
-  /* ./parser//parser.nit:22437 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22437);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22443 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction499___init(val_t p0, int* init_table){
-  int itpos503 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction499].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos503]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22445;
-  fra.me.meth = LOCATE_parser___ReduceAction499___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22445 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos503] = 1;
-  return;
-}
-void parser___ReduceAction500___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 = 22449;
-  fra.me.meth = LOCATE_parser___ReduceAction500___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22455 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22455);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22457 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22457);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22463 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction500___init(val_t p0, int* init_table){
-  int itpos504 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction500].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos504]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22465;
-  fra.me.meth = LOCATE_parser___ReduceAction500___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22465 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos504] = 1;
-  return;
-}
-void parser___ReduceAction501___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 = 22469;
-  fra.me.meth = LOCATE_parser___ReduceAction501___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  /* ./parser//parser.nit:22474 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22474);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22481 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction501___init(val_t p0, int* init_table){
-  int itpos505 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction501].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos505]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22483;
-  fra.me.meth = LOCATE_parser___ReduceAction501___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22483 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos505] = 1;
-  return;
-}
-void parser___ReduceAction502___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 = 22487;
-  fra.me.meth = LOCATE_parser___ReduceAction502___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22493 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22493);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:22495 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22495);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22502 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction502___init(val_t p0, int* init_table){
-  int itpos506 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction502].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos506]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22504;
-  fra.me.meth = LOCATE_parser___ReduceAction502___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22504 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos506] = 1;
-  return;
-}
-void parser___ReduceAction503___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 = 22508;
-  fra.me.meth = LOCATE_parser___ReduceAction503___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22514);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22516 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22516);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22523 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction503___init(val_t p0, int* init_table){
-  int itpos507 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction503].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos507]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22525;
-  fra.me.meth = LOCATE_parser___ReduceAction503___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22525 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos507] = 1;
-  return;
-}
-void parser___ReduceAction504___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 = 22529;
-  fra.me.meth = LOCATE_parser___ReduceAction504___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22536);
-    nit_exit(1);
-  }
-  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:22538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22538);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22540);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22547 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction504___init(val_t p0, int* init_table){
-  int itpos508 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction504].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos508]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22549;
-  fra.me.meth = LOCATE_parser___ReduceAction504___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22549 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos508] = 1;
-  return;
-}
-void parser___ReduceAction505___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 = 22553;
-  fra.me.meth = LOCATE_parser___ReduceAction505___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
-  /* ./parser//parser.nit:22558 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22558);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22563 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction505___init(val_t p0, int* init_table){
-  int itpos509 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction505].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos509]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22565;
-  fra.me.meth = LOCATE_parser___ReduceAction505___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22565 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos509] = 1;
-  return;
-}
-void parser___ReduceAction506___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 = 22569;
-  fra.me.meth = LOCATE_parser___ReduceAction506___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
-  /* ./parser//parser.nit:22574 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22574);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22581 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction506___init(val_t p0, int* init_table){
-  int itpos510 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction506].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos510]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22583;
-  fra.me.meth = LOCATE_parser___ReduceAction506___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22583 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos510] = 1;
-  return;
-}
-void parser___ReduceAction507___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 = 22587;
-  fra.me.meth = LOCATE_parser___ReduceAction507___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22593 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22593);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:22595 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22595);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22602 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction507___init(val_t p0, int* init_table){
-  int itpos511 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction507].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos511]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22604;
-  fra.me.meth = LOCATE_parser___ReduceAction507___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22604 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos511] = 1;
-  return;
-}
-void parser___ReduceAction508___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 = 22608;
-  fra.me.meth = LOCATE_parser___ReduceAction508___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22614);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22616);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22623 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction508___init(val_t p0, int* init_table){
-  int itpos512 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction508].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos512]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22625;
-  fra.me.meth = LOCATE_parser___ReduceAction508___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22625 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos512] = 1;
-  return;
-}
-void parser___ReduceAction509___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 = 22629;
-  fra.me.meth = LOCATE_parser___ReduceAction509___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:22636 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22636);
-    nit_exit(1);
-  }
-  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:22638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22638);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22640 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22640);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22647 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction509___init(val_t p0, int* init_table){
-  int itpos513 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction509].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos513]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22649;
-  fra.me.meth = LOCATE_parser___ReduceAction509___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22649 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos513] = 1;
-  return;
-}
-void parser___ReduceAction510___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 = 22653;
-  fra.me.meth = LOCATE_parser___ReduceAction510___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22658 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22658);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22660 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction510___init(val_t p0, int* init_table){
-  int itpos514 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction510].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos514]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22662;
-  fra.me.meth = LOCATE_parser___ReduceAction510___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22662 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos514] = 1;
-  return;
-}
-void parser___ReduceAction511___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 = 22666;
-  fra.me.meth = LOCATE_parser___ReduceAction511___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22671 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22671);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22673 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction511___init(val_t p0, int* init_table){
-  int itpos515 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction511].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos515]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22675;
-  fra.me.meth = LOCATE_parser___ReduceAction511___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22675 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos515] = 1;
-  return;
-}
-void parser___ReduceAction512___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 = 22679;
-  fra.me.meth = LOCATE_parser___ReduceAction512___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22684 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22684);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22686 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction512___init(val_t p0, int* init_table){
-  int itpos516 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction512].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos516]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22688;
-  fra.me.meth = LOCATE_parser___ReduceAction512___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22688 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos516] = 1;
-  return;
-}
-void parser___ReduceAction513___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 = 22692;
-  fra.me.meth = LOCATE_parser___ReduceAction513___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22697 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22697);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22699 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction513___init(val_t p0, int* init_table){
-  int itpos517 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction513].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos517]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22701;
-  fra.me.meth = LOCATE_parser___ReduceAction513___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22701 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos517] = 1;
-  return;
-}
-void parser___ReduceAction514___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 = 22705;
-  fra.me.meth = LOCATE_parser___ReduceAction514___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22710);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22712 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction514___init(val_t p0, int* init_table){
-  int itpos518 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction514].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos518]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22714;
-  fra.me.meth = LOCATE_parser___ReduceAction514___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22714 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos518] = 1;
-  return;
-}
-void parser___ReduceAction515___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 = 22718;
-  fra.me.meth = LOCATE_parser___ReduceAction515___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:22723 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22723);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22725 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction515___init(val_t p0, int* init_table){
-  int itpos519 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction515].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos519]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22727;
-  fra.me.meth = LOCATE_parser___ReduceAction515___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22727 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos519] = 1;
-  return;
-}
-void parser___ReduceAction516___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 = 22731;
-  fra.me.meth = LOCATE_parser___ReduceAction516___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:22742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22742);
-    nit_exit(1);
-  }
-  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:22744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22744);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22746 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22746);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:22748 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:22749 */
-  } else {
-    /* ./parser//parser.nit:22751 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22761 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction516___init(val_t p0, int* init_table){
-  int itpos520 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction516].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos520]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22763;
-  fra.me.meth = LOCATE_parser___ReduceAction516___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22763 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos520] = 1;
-  return;
-}
-void parser___ReduceAction517___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 = 22767;
-  fra.me.meth = LOCATE_parser___ReduceAction517___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:22777 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22777);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22779 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22779);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22781 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22782 */
-  } else {
-    /* ./parser//parser.nit:22784 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22794 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction517___init(val_t p0, int* init_table){
-  int itpos521 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction517].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos521]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22796;
-  fra.me.meth = LOCATE_parser___ReduceAction517___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22796 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos521] = 1;
-  return;
-}
-void parser___ReduceAction518___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 = 22800;
-  fra.me.meth = LOCATE_parser___ReduceAction518___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:22812 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22812);
-    nit_exit(1);
-  }
-  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:22814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22814);
-    nit_exit(1);
-  }
-  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:22816 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22816);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:22818 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:22819 */
-  } else {
-    /* ./parser//parser.nit:22821 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22825 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22825);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:22827 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:22828 */
-  } else {
-    /* ./parser//parser.nit:22830 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22840 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction518___init(val_t p0, int* init_table){
-  int itpos522 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction518].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos522]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22842;
-  fra.me.meth = LOCATE_parser___ReduceAction518___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22842 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos522] = 1;
-  return;
-}
-void parser___ReduceAction519___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 = 22846;
-  fra.me.meth = LOCATE_parser___ReduceAction519___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:22857 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22857);
-    nit_exit(1);
-  }
-  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:22859 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22859);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:22861 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:22862 */
-  } else {
-    /* ./parser//parser.nit:22864 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22868 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22868);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:22870 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:22871 */
-  } else {
-    /* ./parser//parser.nit:22873 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22883 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction519___init(val_t p0, int* init_table){
-  int itpos523 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction519].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos523]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22885;
-  fra.me.meth = LOCATE_parser___ReduceAction519___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22885 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos523] = 1;
-  return;
-}
-void parser___ReduceAction520___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 = 22889;
-  fra.me.meth = LOCATE_parser___ReduceAction520___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:22896 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22896);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22898 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22898);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22900 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22901 */
-  } else {
-    /* ./parser//parser.nit:22903 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22912 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction520___init(val_t p0, int* init_table){
-  int itpos524 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction520].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos524]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22914;
-  fra.me.meth = LOCATE_parser___ReduceAction520___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22914 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos524] = 1;
-  return;
-}
-void parser___ReduceAction521___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 = 22918;
-  fra.me.meth = LOCATE_parser___ReduceAction521___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:22926 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22926);
-    nit_exit(1);
-  }
-  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:22928 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22928);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22930);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:22932 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:22933 */
-  } else {
-    /* ./parser//parser.nit:22935 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22944 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction521___init(val_t p0, int* init_table){
-  int itpos525 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction521].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos525]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22946;
-  fra.me.meth = LOCATE_parser___ReduceAction521___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22946 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos525] = 1;
-  return;
-}
-void parser___ReduceAction522___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 = 22950;
-  fra.me.meth = LOCATE_parser___ReduceAction522___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:22960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22960);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:22962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22962);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22964);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:22966 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:22967 */
-  } else {
-    /* ./parser//parser.nit:22969 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:22978 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction522___init(val_t p0, int* init_table){
-  int itpos526 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction522].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos526]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 22980;
-  fra.me.meth = LOCATE_parser___ReduceAction522___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:22980 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos526] = 1;
-  return;
-}
-void parser___ReduceAction523___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 = 22984;
-  fra.me.meth = LOCATE_parser___ReduceAction523___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:22993 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22993);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:22995 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 22995);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:22997 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:22998 */
-  } else {
-    /* ./parser//parser.nit:23000 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(28);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23009 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction523___init(val_t p0, int* init_table){
-  int itpos527 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction523].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos527]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23011;
-  fra.me.meth = LOCATE_parser___ReduceAction523___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23011 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos527] = 1;
-  return;
-}
-void parser___ReduceAction524___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 = 23015;
-  fra.me.meth = LOCATE_parser___ReduceAction524___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwlabel, ID_TKwlabel)) /*cast nullable TKwlabel*/;
-  /* ./parser//parser.nit:23021 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23021);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:23023 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23023);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALabel_parser_prod___ALabel___init_alabel(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(29);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23029 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction524___init(val_t p0, int* init_table){
-  int itpos528 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction524].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos528]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23031;
-  fra.me.meth = LOCATE_parser___ReduceAction524___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23031 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos528] = 1;
-  return;
-}
-void parser___ReduceAction525___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23035;
-  fra.me.meth = LOCATE_parser___ReduceAction525___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast nullable AClosureDef*/;
-  /* ./parser//parser.nit:23041 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23041);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:23042 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23043 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(30);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23046 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction525___init(val_t p0, int* init_table){
-  int itpos529 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction525].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos529]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23048;
-  fra.me.meth = LOCATE_parser___ReduceAction525___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23048 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos529] = 1;
-  return;
-}
-void parser___ReduceAction526___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 = 23052;
-  fra.me.meth = LOCATE_parser___ReduceAction526___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureDef, ID_AClosureDef)) /*cast nullable AClosureDef*/;
-  /* ./parser//parser.nit:23059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23059);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:23061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23061);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:23062 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23063 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:23066 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:23067 */
-  } else {
-    /* ./parser//parser.nit:23069 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(30);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23073 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction526___init(val_t p0, int* init_table){
-  int itpos530 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction526].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos530]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23075;
-  fra.me.meth = LOCATE_parser___ReduceAction526___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23075 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos530] = 1;
-  return;
-}
-void parser___ReduceAction527___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 23079;
-  fra.me.meth = LOCATE_parser___ReduceAction527___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23091);
-    nit_exit(1);
-  }
-  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:23093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23093);
-    nit_exit(1);
-  }
-  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:23095 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23095);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23098 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23098);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:23099 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23100 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23114 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction527___init(val_t p0, int* init_table){
-  int itpos531 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction527].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos531]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23116;
-  fra.me.meth = LOCATE_parser___ReduceAction527___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23116 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos531] = 1;
-  return;
-}
-void parser___ReduceAction528___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 23120;
-  fra.me.meth = LOCATE_parser___ReduceAction528___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23133);
-    nit_exit(1);
-  }
-  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:23135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23135);
-    nit_exit(1);
-  }
-  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:23137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23137);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:23140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23140);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:23142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23142);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:23143 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23144 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:23147 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:23148 */
-  } else {
-    /* ./parser//parser.nit:23150 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  fra.me.REG[8] = 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[8], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23165 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction528___init(val_t p0, int* init_table){
-  int itpos532 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction528].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos532]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23167;
-  fra.me.meth = LOCATE_parser___ReduceAction528___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23167 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos532] = 1;
-  return;
-}
-void parser___ReduceAction529___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 = 23171;
-  fra.me.meth = LOCATE_parser___ReduceAction529___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:23181 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23181);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:23183 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23183);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:23185 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23185);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23199 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction529___init(val_t p0, int* init_table){
-  int itpos533 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction529].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos533]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23201;
-  fra.me.meth = LOCATE_parser___ReduceAction529___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23201 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos533] = 1;
-  return;
-}
-void parser___ReduceAction530___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 = 23205;
-  fra.me.meth = LOCATE_parser___ReduceAction530___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:23214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23214);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:23216 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23216);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:23218 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23218);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23232 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction530___init(val_t p0, int* init_table){
-  int itpos534 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction530].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos534]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23234;
-  fra.me.meth = LOCATE_parser___ReduceAction530___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23234 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos534] = 1;
-  return;
-}
-void parser___ReduceAction531___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 23238;
-  fra.me.meth = LOCATE_parser___ReduceAction531___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23251 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23251);
-    nit_exit(1);
-  }
-  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:23253 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23253);
-    nit_exit(1);
-  }
-  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:23255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23255);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:23257 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:23258 */
-  } else {
-    /* ./parser//parser.nit:23260 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:23264 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23264);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23267 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23267);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:23268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23269 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23283 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction531___init(val_t p0, int* init_table){
-  int itpos535 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction531].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos535]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23285;
-  fra.me.meth = LOCATE_parser___ReduceAction531___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23285 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos535] = 1;
-  return;
-}
-void parser___ReduceAction532___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 23289;
-  fra.me.meth = LOCATE_parser___ReduceAction532___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:23303 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23303);
-    nit_exit(1);
-  }
-  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:23305 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23305);
-    nit_exit(1);
-  }
-  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:23307 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23307);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:23309 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:23310 */
-  } else {
-    /* ./parser//parser.nit:23312 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  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:23316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23316);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:23319 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23319);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:23321 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23321);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:23322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23323 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:23326 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:23327 */
-  } else {
-    /* ./parser//parser.nit:23329 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = 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[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23344 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction532___init(val_t p0, int* init_table){
-  int itpos536 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction532].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos536]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23346;
-  fra.me.meth = LOCATE_parser___ReduceAction532___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23346 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos536] = 1;
-  return;
-}
-void parser___ReduceAction533___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 = 23350;
-  fra.me.meth = LOCATE_parser___ReduceAction533___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23361 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23361);
-    nit_exit(1);
-  }
-  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:23363 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23363);
-    nit_exit(1);
-  }
-  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:23365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23365);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:23367 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:23368 */
-  } else {
-    /* ./parser//parser.nit:23370 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:23374 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23374);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  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[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23388 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction533___init(val_t p0, int* init_table){
-  int itpos537 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction533].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos537]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23390;
-  fra.me.meth = LOCATE_parser___ReduceAction533___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23390 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos537] = 1;
-  return;
-}
-void parser___ReduceAction534___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 = 23394;
-  fra.me.meth = LOCATE_parser___ReduceAction534___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23404);
-    nit_exit(1);
-  }
-  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:23406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23406);
-    nit_exit(1);
-  }
-  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:23408 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23408);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:23410 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:23411 */
-  } else {
-    /* ./parser//parser.nit:23413 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:23417 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23417);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  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[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23431 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction534___init(val_t p0, int* init_table){
-  int itpos538 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction534].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos538]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23433;
-  fra.me.meth = LOCATE_parser___ReduceAction534___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23433 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos538] = 1;
-  return;
-}
-void parser___ReduceAction535___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 23437;
-  fra.me.meth = LOCATE_parser___ReduceAction535___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23450 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23450);
-    nit_exit(1);
-  }
-  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:23452 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23452);
-    nit_exit(1);
-  }
-  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:23454 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23454);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:23457 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23457);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:23458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23459 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23465 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23465);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23475 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction535___init(val_t p0, int* init_table){
-  int itpos539 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction535].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos539]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23477;
-  fra.me.meth = LOCATE_parser___ReduceAction535___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23477 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos539] = 1;
-  return;
-}
-void parser___ReduceAction536___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 23481;
-  fra.me.meth = LOCATE_parser___ReduceAction536___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:23495 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23495);
-    nit_exit(1);
-  }
-  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:23497 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23497);
-    nit_exit(1);
-  }
-  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:23499 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23499);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:23502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23502);
-    nit_exit(1);
-  }
-  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:23504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23504);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:23505 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23506 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:23509 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:23510 */
-  } else {
-    /* ./parser//parser.nit:23512 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  fra.me.REG[9] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23519);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[9], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23529 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction536___init(val_t p0, int* init_table){
-  int itpos540 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction536].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos540]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23531;
-  fra.me.meth = LOCATE_parser___ReduceAction536___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23531 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos540] = 1;
-  return;
-}
-void parser___ReduceAction537___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 = 23535;
-  fra.me.meth = LOCATE_parser___ReduceAction537___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23546);
-    nit_exit(1);
-  }
-  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:23548 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23548);
-    nit_exit(1);
-  }
-  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:23550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23550);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23556 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23556);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23566 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction537___init(val_t p0, int* init_table){
-  int itpos541 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction537].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos541]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23568;
-  fra.me.meth = LOCATE_parser___ReduceAction537___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23568 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos541] = 1;
-  return;
-}
-void parser___ReduceAction538___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 = 23572;
-  fra.me.meth = LOCATE_parser___ReduceAction538___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23582);
-    nit_exit(1);
-  }
-  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:23584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23584);
-    nit_exit(1);
-  }
-  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:23586 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23586);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23592 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23592);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23602 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction538___init(val_t p0, int* init_table){
-  int itpos542 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction538].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos542]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23604;
-  fra.me.meth = LOCATE_parser___ReduceAction538___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23604 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos542] = 1;
-  return;
-}
-void parser___ReduceAction539___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 23608;
-  fra.me.meth = LOCATE_parser___ReduceAction539___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:23622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23622);
-    nit_exit(1);
-  }
-  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:23624 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23624);
-    nit_exit(1);
-  }
-  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:23626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23626);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:23628 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:23629 */
-  } else {
-    /* ./parser//parser.nit:23631 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  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:23635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23635);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:23638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23638);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:23639 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23640 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23646);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23656 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction539___init(val_t p0, int* init_table){
-  int itpos543 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction539].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos543]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23658;
-  fra.me.meth = LOCATE_parser___ReduceAction539___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23658 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos543] = 1;
-  return;
-}
-void parser___ReduceAction540___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 23662;
-  fra.me.meth = LOCATE_parser___ReduceAction540___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:23677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23677);
-    nit_exit(1);
-  }
-  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:23679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23679);
-    nit_exit(1);
-  }
-  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:23681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23681);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:23683 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[6];
-  /* ./parser//parser.nit:23684 */
-  } else {
-    /* ./parser//parser.nit:23686 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
-  }
-  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:23690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23690);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23693);
-    nit_exit(1);
-  }
-  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:23695 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23695);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:23696 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23697 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:23700 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:23701 */
-  } else {
-    /* ./parser//parser.nit:23703 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23710);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23720 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction540___init(val_t p0, int* init_table){
-  int itpos544 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction540].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos544]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23722;
-  fra.me.meth = LOCATE_parser___ReduceAction540___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23722 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos544] = 1;
-  return;
-}
-void parser___ReduceAction541___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 = 23726;
-  fra.me.meth = LOCATE_parser___ReduceAction541___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23738);
-    nit_exit(1);
-  }
-  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:23740 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23740);
-    nit_exit(1);
-  }
-  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:23742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23742);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:23744 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:23745 */
-  } else {
-    /* ./parser//parser.nit:23747 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:23751 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23751);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23757 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23757);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23767 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction541___init(val_t p0, int* init_table){
-  int itpos545 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction541].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos545]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23769;
-  fra.me.meth = LOCATE_parser___ReduceAction541___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23769 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos545] = 1;
-  return;
-}
-void parser___ReduceAction542___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 = 23773;
-  fra.me.meth = LOCATE_parser___ReduceAction542___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23784);
-    nit_exit(1);
-  }
-  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:23786 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23786);
-    nit_exit(1);
-  }
-  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:23788 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23788);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:23790 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:23791 */
-  } else {
-    /* ./parser//parser.nit:23793 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:23797 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23797);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:23803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23803);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23813 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction542___init(val_t p0, int* init_table){
-  int itpos546 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction542].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos546]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23815;
-  fra.me.meth = LOCATE_parser___ReduceAction542___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23815 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos546] = 1;
-  return;
-}
-void parser___ReduceAction543___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 = 23819;
-  fra.me.meth = LOCATE_parser___ReduceAction543___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23828 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23828);
-    nit_exit(1);
-  }
-  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:23830 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23830);
-    nit_exit(1);
-  }
-  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:23832 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23832);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23834);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23844 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction543___init(val_t p0, int* init_table){
-  int itpos547 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction543].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos547]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23846;
-  fra.me.meth = LOCATE_parser___ReduceAction543___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23846 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos547] = 1;
-  return;
-}
-void parser___ReduceAction544___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 = 23850;
-  fra.me.meth = LOCATE_parser___ReduceAction544___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:23860 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23860);
-    nit_exit(1);
-  }
-  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:23862 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23862);
-    nit_exit(1);
-  }
-  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:23864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23864);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:23866 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:23867 */
-  } else {
-    /* ./parser//parser.nit:23869 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:23873 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23873);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23875 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23875);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23885 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction544___init(val_t p0, int* init_table){
-  int itpos548 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction544].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos548]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23887;
-  fra.me.meth = LOCATE_parser___ReduceAction544___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23887 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos548] = 1;
-  return;
-}
-void parser___ReduceAction545___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 = 23891;
-  fra.me.meth = LOCATE_parser___ReduceAction545___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:23901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23901);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:23903 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23903);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23905 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23905);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], NIT_NULL, fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23915 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction545___init(val_t p0, int* init_table){
-  int itpos549 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction545].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos549]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23917;
-  fra.me.meth = LOCATE_parser___ReduceAction545___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23917 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos549] = 1;
-  return;
-}
-void parser___ReduceAction546___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 = 23921;
-  fra.me.meth = LOCATE_parser___ReduceAction546___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23932);
-    nit_exit(1);
-  }
-  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:23934 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23934);
-    nit_exit(1);
-  }
-  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:23936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23936);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:23938 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:23939 */
-  } else {
-    /* ./parser//parser.nit:23941 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23945);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(31);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23955 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction546___init(val_t p0, int* init_table){
-  int itpos550 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction546].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos550]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23957;
-  fra.me.meth = LOCATE_parser___ReduceAction546___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23957 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos550] = 1;
-  return;
-}
-void parser___ReduceAction547___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 23961;
-  fra.me.meth = LOCATE_parser___ReduceAction547___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:23972 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23972);
-    nit_exit(1);
-  }
-  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:23974 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23974);
-    nit_exit(1);
-  }
-  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:23976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23976);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:23979 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 23979);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:23980 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:23981 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:23995 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction547___init(val_t p0, int* init_table){
-  int itpos551 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction547].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos551]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 23997;
-  fra.me.meth = LOCATE_parser___ReduceAction547___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:23997 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos551] = 1;
-  return;
-}
-void parser___ReduceAction548___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 24001;
-  fra.me.meth = LOCATE_parser___ReduceAction548___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:24013 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24013);
-    nit_exit(1);
-  }
-  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:24015 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24015);
-    nit_exit(1);
-  }
-  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:24017 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24017);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:24020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24020);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:24022 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24022);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:24023 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24024 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:24027 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:24028 */
-  } else {
-    /* ./parser//parser.nit:24030 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  fra.me.REG[8] = 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[8], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24045 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction548___init(val_t p0, int* init_table){
-  int itpos552 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction548].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos552]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24047;
-  fra.me.meth = LOCATE_parser___ReduceAction548___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24047 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos552] = 1;
-  return;
-}
-void parser___ReduceAction549___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 24051;
-  fra.me.meth = LOCATE_parser___ReduceAction549___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:24063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24063);
-    nit_exit(1);
-  }
-  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:24065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24065);
-    nit_exit(1);
-  }
-  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:24067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24067);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:24069 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:24070 */
-  } else {
-    /* ./parser//parser.nit:24072 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:24076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24076);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24079 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24079);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:24080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24081 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24095 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction549___init(val_t p0, int* init_table){
-  int itpos553 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction549].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos553]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24097;
-  fra.me.meth = LOCATE_parser___ReduceAction549___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24097 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos553] = 1;
-  return;
-}
-void parser___ReduceAction550___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 24101;
-  fra.me.meth = LOCATE_parser___ReduceAction550___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:24114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24114);
-    nit_exit(1);
-  }
-  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:24116 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24116);
-    nit_exit(1);
-  }
-  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:24118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24118);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:24120 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:24121 */
-  } else {
-    /* ./parser//parser.nit:24123 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  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:24127 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24127);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:24130 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24130);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:24132 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24132);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:24133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24134 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:24137 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:24138 */
-  } else {
-    /* ./parser//parser.nit:24140 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = 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[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24155 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction550___init(val_t p0, int* init_table){
-  int itpos554 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction550].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos554]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24157;
-  fra.me.meth = LOCATE_parser___ReduceAction550___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24157 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos554] = 1;
-  return;
-}
-void parser___ReduceAction551___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 = 24161;
-  fra.me.meth = LOCATE_parser___ReduceAction551___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:24170 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24170);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:24172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24172);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:24174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24174);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24184 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction551___init(val_t p0, int* init_table){
-  int itpos555 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction551].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos555]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24186;
-  fra.me.meth = LOCATE_parser___ReduceAction551___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24186 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos555] = 1;
-  return;
-}
-void parser___ReduceAction552___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 = 24190;
-  fra.me.meth = LOCATE_parser___ReduceAction552___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:24200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24200);
-    nit_exit(1);
-  }
-  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:24202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24202);
-    nit_exit(1);
-  }
-  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:24204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24204);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24206 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:24207 */
-  } else {
-    /* ./parser//parser.nit:24209 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:24213 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24213);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(32);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24223 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction552___init(val_t p0, int* init_table){
-  int itpos556 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction552].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos556]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24225;
-  fra.me.meth = LOCATE_parser___ReduceAction552___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24225 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos556] = 1;
-  return;
-}
-void parser___ReduceAction553___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 = 24229;
-  fra.me.meth = LOCATE_parser___ReduceAction553___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:24234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24234);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(33);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24239 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction553___init(val_t p0, int* init_table){
-  int itpos557 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction553].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos557]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24241;
-  fra.me.meth = LOCATE_parser___ReduceAction553___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24241 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos557] = 1;
-  return;
-}
-void parser___ReduceAction554___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 = 24245;
-  fra.me.meth = LOCATE_parser___ReduceAction554___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  /* ./parser//parser.nit:24250 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24250);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(33);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24255 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction554___init(val_t p0, int* init_table){
-  int itpos558 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction554].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos558]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24257;
-  fra.me.meth = LOCATE_parser___ReduceAction554___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24257 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos558] = 1;
-  return;
-}
-void parser___ReduceAction555___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 = 24261;
-  fra.me.meth = LOCATE_parser___ReduceAction555___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24266 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24266);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(34);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24273 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction555___init(val_t p0, int* init_table){
-  int itpos559 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction555].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos559]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24275;
-  fra.me.meth = LOCATE_parser___ReduceAction555___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24275 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos559] = 1;
-  return;
-}
-void parser___ReduceAction556___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 = 24279;
-  fra.me.meth = LOCATE_parser___ReduceAction556___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:24285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24285);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:24287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24287);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(35);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24296 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction556___init(val_t p0, int* init_table){
-  int itpos560 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction556].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos560]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24298;
-  fra.me.meth = LOCATE_parser___ReduceAction556___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24298 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos560] = 1;
-  return;
-}
-void parser___ReduceAction557___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 = 24302;
-  fra.me.meth = LOCATE_parser___ReduceAction557___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24309 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24309);
-    nit_exit(1);
-  }
-  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:24311 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24311);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:24313 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24313);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(35);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24322 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction557___init(val_t p0, int* init_table){
-  int itpos561 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction557].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos561]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24324;
-  fra.me.meth = LOCATE_parser___ReduceAction557___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24324 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos561] = 1;
-  return;
-}
-void parser___ReduceAction558___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 = 24328;
-  fra.me.meth = LOCATE_parser___ReduceAction558___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24337);
-    nit_exit(1);
-  }
-  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:24339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24339);
-    nit_exit(1);
-  }
-  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:24341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24341);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24343 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24343);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(35);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24352 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction558___init(val_t p0, int* init_table){
-  int itpos562 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction558].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos562]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24354;
-  fra.me.meth = LOCATE_parser___ReduceAction558___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24354 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos562] = 1;
-  return;
-}
-void parser___ReduceAction559___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 = 24358;
-  fra.me.meth = LOCATE_parser___ReduceAction559___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24368);
-    nit_exit(1);
-  }
-  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:24370 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24370);
-    nit_exit(1);
-  }
-  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:24372 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24372);
-    nit_exit(1);
-  }
-  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:24374 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24374);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24376);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(35);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24385 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction559___init(val_t p0, int* init_table){
-  int itpos563 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction559].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos563]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24387;
-  fra.me.meth = LOCATE_parser___ReduceAction559___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24387 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos563] = 1;
-  return;
-}
-void parser___ReduceAction560___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 = 24391;
-  fra.me.meth = LOCATE_parser___ReduceAction560___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24401 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24401);
-    nit_exit(1);
-  }
-  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:24403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24403);
-    nit_exit(1);
-  }
-  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:24405 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24405);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24407 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24407);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24415 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction560___init(val_t p0, int* init_table){
-  int itpos564 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction560].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos564]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24417;
-  fra.me.meth = LOCATE_parser___ReduceAction560___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24417 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos564] = 1;
-  return;
-}
-void parser___ReduceAction561___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 = 24421;
-  fra.me.meth = LOCATE_parser___ReduceAction561___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:24430 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24430);
-    nit_exit(1);
-  }
-  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:24432 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24432);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24434 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24434);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24442 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction561___init(val_t p0, int* init_table){
-  int itpos565 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction561].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos565]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24444;
-  fra.me.meth = LOCATE_parser___ReduceAction561___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24444 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos565] = 1;
-  return;
-}
-void parser___ReduceAction562___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 = 24448;
-  fra.me.meth = LOCATE_parser___ReduceAction562___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:24460 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24460);
-    nit_exit(1);
-  }
-  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:24462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24462);
-    nit_exit(1);
-  }
-  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:24464 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24464);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:24466 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:24467 */
-  } else {
-    /* ./parser//parser.nit:24469 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:24473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24475);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24484 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction562___init(val_t p0, int* init_table){
-  int itpos566 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction562].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos566]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24486;
-  fra.me.meth = LOCATE_parser___ReduceAction562___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24486 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos566] = 1;
-  return;
-}
-void parser___ReduceAction563___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 = 24490;
-  fra.me.meth = LOCATE_parser___ReduceAction563___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:24501 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24501);
-    nit_exit(1);
-  }
-  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:24503 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24503);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24505 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:24506 */
-  } else {
-    /* ./parser//parser.nit:24508 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  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:24512 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24512);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24514 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24514);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24523 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction563___init(val_t p0, int* init_table){
-  int itpos567 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction563].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos567]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24525;
-  fra.me.meth = LOCATE_parser___ReduceAction563___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24525 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos567] = 1;
-  return;
-}
-void parser___ReduceAction564___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 = 24529;
-  fra.me.meth = LOCATE_parser___ReduceAction564___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:24538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24538);
-    nit_exit(1);
-  }
-  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:24540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24540);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24542 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:24543 */
-  } else {
-    /* ./parser//parser.nit:24545 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  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:24549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24549);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24551);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABraAssignExpr_parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24559 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction564___init(val_t p0, int* init_table){
-  int itpos568 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction564].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos568]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24561;
-  fra.me.meth = LOCATE_parser___ReduceAction564___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24561 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos568] = 1;
-  return;
-}
-void parser___ReduceAction565___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 = 24565;
-  fra.me.meth = LOCATE_parser___ReduceAction565___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24575 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24575);
-    nit_exit(1);
-  }
-  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:24577 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24577);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:24579 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24579);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24581 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24581);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24589 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction565___init(val_t p0, int* init_table){
-  int itpos569 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction565].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos569]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24591;
-  fra.me.meth = LOCATE_parser___ReduceAction565___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24591 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos569] = 1;
-  return;
-}
-void parser___ReduceAction566___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 = 24595;
-  fra.me.meth = LOCATE_parser___ReduceAction566___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:24604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24604);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:24606 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24606);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24608);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24616 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction566___init(val_t p0, int* init_table){
-  int itpos570 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction566].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos570]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24618;
-  fra.me.meth = LOCATE_parser___ReduceAction566___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24618 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos570] = 1;
-  return;
-}
-void parser___ReduceAction567___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 = 24622;
-  fra.me.meth = LOCATE_parser___ReduceAction567___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:24634 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24634);
-    nit_exit(1);
-  }
-  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:24636 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24636);
-    nit_exit(1);
-  }
-  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:24638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24638);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:24640 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:24641 */
-  } else {
-    /* ./parser//parser.nit:24643 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:24647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24647);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24649);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24658 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction567___init(val_t p0, int* init_table){
-  int itpos571 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction567].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos571]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24660;
-  fra.me.meth = LOCATE_parser___ReduceAction567___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24660 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos571] = 1;
-  return;
-}
-void parser___ReduceAction568___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 = 24664;
-  fra.me.meth = LOCATE_parser___ReduceAction568___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:24675 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24675);
-    nit_exit(1);
-  }
-  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:24677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24677);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24679 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:24680 */
-  } else {
-    /* ./parser//parser.nit:24682 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:24686 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24686);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24688 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24688);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24697 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction568___init(val_t p0, int* init_table){
-  int itpos572 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction568].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos572]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24699;
-  fra.me.meth = LOCATE_parser___ReduceAction568___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24699 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos572] = 1;
-  return;
-}
-void parser___ReduceAction569___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 = 24703;
-  fra.me.meth = LOCATE_parser___ReduceAction569___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:24712 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24712);
-    nit_exit(1);
-  }
-  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:24714 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24714);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24716 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:24717 */
-  } else {
-    /* ./parser//parser.nit:24719 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:24723 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24723);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24725 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24725);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ABraReassignExpr_parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(36);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24733 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction569___init(val_t p0, int* init_table){
-  int itpos573 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction569].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos573]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24735;
-  fra.me.meth = LOCATE_parser___ReduceAction569___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24735 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos573] = 1;
-  return;
-}
-void parser___ReduceAction570___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 = 24739;
-  fra.me.meth = LOCATE_parser___ReduceAction570___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TPluseq, ID_TPluseq)) /*cast nullable TPluseq*/;
-  /* ./parser//parser.nit:24744 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24744);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(37);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24749 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction570___init(val_t p0, int* init_table){
-  int itpos574 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction570].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos574]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24751;
-  fra.me.meth = LOCATE_parser___ReduceAction570___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24751 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos574] = 1;
-  return;
-}
-void parser___ReduceAction571___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 = 24755;
-  fra.me.meth = LOCATE_parser___ReduceAction571___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TMinuseq, ID_TMinuseq)) /*cast nullable TMinuseq*/;
-  /* ./parser//parser.nit:24760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24760);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(37);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24765 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction571___init(val_t p0, int* init_table){
-  int itpos575 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction571].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos575]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24767;
-  fra.me.meth = LOCATE_parser___ReduceAction571___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24767 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos575] = 1;
-  return;
-}
-void parser___ReduceAction572___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 = 24771;
-  fra.me.meth = LOCATE_parser___ReduceAction572___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24780 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24780);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:24783 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24783);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:24784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24785 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24796 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction572___init(val_t p0, int* init_table){
-  int itpos576 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction572].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos576]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24798;
-  fra.me.meth = LOCATE_parser___ReduceAction572___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24798 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos576] = 1;
-  return;
-}
-void parser___ReduceAction573___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 = 24802;
-  fra.me.meth = LOCATE_parser___ReduceAction573___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24812 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24812);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:24815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24815);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:24817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24817);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:24818 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24819 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:24822 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:24823 */
-  } else {
-    /* ./parser//parser.nit:24825 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24837 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction573___init(val_t p0, int* init_table){
-  int itpos577 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction573].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos577]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24839;
-  fra.me.meth = LOCATE_parser___ReduceAction573___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24839 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos577] = 1;
-  return;
-}
-void parser___ReduceAction574___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 = 24843;
-  fra.me.meth = LOCATE_parser___ReduceAction574___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:24850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24850);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24861 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction574___init(val_t p0, int* init_table){
-  int itpos578 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction574].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos578]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24863;
-  fra.me.meth = LOCATE_parser___ReduceAction574___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24863 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos578] = 1;
-  return;
-}
-void parser___ReduceAction575___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 = 24867;
-  fra.me.meth = LOCATE_parser___ReduceAction575___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:24873 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24873);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24884 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction575___init(val_t p0, int* init_table){
-  int itpos579 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction575].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos579]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24886;
-  fra.me.meth = LOCATE_parser___ReduceAction575___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24886 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos579] = 1;
-  return;
-}
-void parser___ReduceAction576___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 = 24890;
-  fra.me.meth = LOCATE_parser___ReduceAction576___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24900 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24900);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:24903 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24903);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:24904 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24905 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:24911 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24911);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24918 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction576___init(val_t p0, int* init_table){
-  int itpos580 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction576].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos580]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24920;
-  fra.me.meth = LOCATE_parser___ReduceAction576___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24920 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos580] = 1;
-  return;
-}
-void parser___ReduceAction577___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 = 24924;
-  fra.me.meth = LOCATE_parser___ReduceAction577___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24935 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24935);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:24938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24938);
-    nit_exit(1);
-  }
-  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:24940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24940);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:24941 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:24942 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:24945 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:24946 */
-  } else {
-    /* ./parser//parser.nit:24948 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:24955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24955);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24962 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction577___init(val_t p0, int* init_table){
-  int itpos581 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction577].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos581]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24964;
-  fra.me.meth = LOCATE_parser___ReduceAction577___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24964 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos581] = 1;
-  return;
-}
-void parser___ReduceAction578___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 = 24968;
-  fra.me.meth = LOCATE_parser___ReduceAction578___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:24976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24976);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:24982 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 24982);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:24989 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction578___init(val_t p0, int* init_table){
-  int itpos582 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction578].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos582]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 24991;
-  fra.me.meth = LOCATE_parser___ReduceAction578___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:24991 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos582] = 1;
-  return;
-}
-void parser___ReduceAction579___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 = 24995;
-  fra.me.meth = LOCATE_parser___ReduceAction579___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25002);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25008 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25008);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25015 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction579___init(val_t p0, int* init_table){
-  int itpos583 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction579].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos583]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25017;
-  fra.me.meth = LOCATE_parser___ReduceAction579___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25017 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos583] = 1;
-  return;
-}
-void parser___ReduceAction580___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 = 25021;
-  fra.me.meth = LOCATE_parser___ReduceAction580___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25027 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25027);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25029 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25029);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(38);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25036 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction580___init(val_t p0, int* init_table){
-  int itpos584 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction580].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos584]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25038;
-  fra.me.meth = LOCATE_parser___ReduceAction580___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25038 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos584] = 1;
-  return;
-}
-void parser___ReduceAction581___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 = 25042;
-  fra.me.meth = LOCATE_parser___ReduceAction581___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25054);
-    nit_exit(1);
-  }
-  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:25056 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25056);
-    nit_exit(1);
-  }
-  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:25058 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25058);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25060 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25060);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25068 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction581___init(val_t p0, int* init_table){
-  int itpos585 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction581].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos585]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25070;
-  fra.me.meth = LOCATE_parser___ReduceAction581___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25070 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos585] = 1;
-  return;
-}
-void parser___ReduceAction582___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 = 25074;
-  fra.me.meth = LOCATE_parser___ReduceAction582___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:25084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25084);
-    nit_exit(1);
-  }
-  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:25086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25086);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25088 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25088);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25096 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction582___init(val_t p0, int* init_table){
-  int itpos586 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction582].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos586]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25098;
-  fra.me.meth = LOCATE_parser___ReduceAction582___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25098 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos586] = 1;
-  return;
-}
-void parser___ReduceAction583___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 = 25102;
-  fra.me.meth = LOCATE_parser___ReduceAction583___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25115 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25115);
-    nit_exit(1);
-  }
-  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:25117 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25117);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:25120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25120);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25122 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25128);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25136 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction583___init(val_t p0, int* init_table){
-  int itpos587 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction583].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos587]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25138;
-  fra.me.meth = LOCATE_parser___ReduceAction583___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25138 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos587] = 1;
-  return;
-}
-void parser___ReduceAction584___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 25142;
-  fra.me.meth = LOCATE_parser___ReduceAction584___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25156 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25156);
-    nit_exit(1);
-  }
-  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:25158 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25158);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:25161 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25161);
-    nit_exit(1);
-  }
-  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:25163 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25163);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:25164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25165 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:25168 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:25169 */
-  } else {
-    /* ./parser//parser.nit:25171 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25178);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25186 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction584___init(val_t p0, int* init_table){
-  int itpos588 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction584].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos588]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25188;
-  fra.me.meth = LOCATE_parser___ReduceAction584___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25188 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos588] = 1;
-  return;
-}
-void parser___ReduceAction585___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 = 25192;
-  fra.me.meth = LOCATE_parser___ReduceAction585___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:25202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25202);
-    nit_exit(1);
-  }
-  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:25204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25204);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25206);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25214 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction585___init(val_t p0, int* init_table){
-  int itpos589 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction585].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos589]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25216;
-  fra.me.meth = LOCATE_parser___ReduceAction585___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25216 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos589] = 1;
-  return;
-}
-void parser___ReduceAction586___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 = 25220;
-  fra.me.meth = LOCATE_parser___ReduceAction586___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:25231 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25231);
-    nit_exit(1);
-  }
-  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:25233 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25233);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25235 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25235);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(39);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25243 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction586___init(val_t p0, int* init_table){
-  int itpos590 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction586].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos590]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25245;
-  fra.me.meth = LOCATE_parser___ReduceAction586___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25245 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos590] = 1;
-  return;
-}
-void parser___ReduceAction587___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 = 25249;
-  fra.me.meth = LOCATE_parser___ReduceAction587___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25255);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(40);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25257 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction587___init(val_t p0, int* init_table){
-  int itpos591 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction587].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos591]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25259;
-  fra.me.meth = LOCATE_parser___ReduceAction587___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25259 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos591] = 1;
-  return;
-}
-void parser___ReduceAction588___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 = 25263;
-  fra.me.meth = LOCATE_parser___ReduceAction588___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[0] = NIT_NULL;
-  REGB0 = TAG_Int(40);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25268 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction588___init(val_t p0, int* init_table){
-  int itpos592 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction588].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos592]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25270;
-  fra.me.meth = LOCATE_parser___ReduceAction588___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25270 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos592] = 1;
-  return;
-}
-void parser___ReduceAction589___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 = 25274;
-  fra.me.meth = LOCATE_parser___ReduceAction589___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25283);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25286);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:25287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25288 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25299 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction589___init(val_t p0, int* init_table){
-  int itpos593 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction589].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos593]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25301;
-  fra.me.meth = LOCATE_parser___ReduceAction589___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25301 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos593] = 1;
-  return;
-}
-void parser___ReduceAction590___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 = 25305;
-  fra.me.meth = LOCATE_parser___ReduceAction590___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25315 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25315);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:25318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25318);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:25320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25320);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25321 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25322 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:25325 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:25326 */
-  } else {
-    /* ./parser//parser.nit:25328 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25340 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction590___init(val_t p0, int* init_table){
-  int itpos594 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction590].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos594]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25342;
-  fra.me.meth = LOCATE_parser___ReduceAction590___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25342 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos594] = 1;
-  return;
-}
-void parser___ReduceAction591___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 = 25346;
-  fra.me.meth = LOCATE_parser___ReduceAction591___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25353 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25353);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25364 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction591___init(val_t p0, int* init_table){
-  int itpos595 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction591].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos595]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25366;
-  fra.me.meth = LOCATE_parser___ReduceAction591___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25366 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos595] = 1;
-  return;
-}
-void parser___ReduceAction592___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 = 25370;
-  fra.me.meth = LOCATE_parser___ReduceAction592___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25376);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25387 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction592___init(val_t p0, int* init_table){
-  int itpos596 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction592].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos596]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25389;
-  fra.me.meth = LOCATE_parser___ReduceAction592___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25389 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos596] = 1;
-  return;
-}
-void parser___ReduceAction593___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 = 25393;
-  fra.me.meth = LOCATE_parser___ReduceAction593___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25403 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25403);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:25406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25406);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25407 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25408 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25414);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25421 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction593___init(val_t p0, int* init_table){
-  int itpos597 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction593].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos597]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25423;
-  fra.me.meth = LOCATE_parser___ReduceAction593___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25423 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos597] = 1;
-  return;
-}
-void parser___ReduceAction594___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 = 25427;
-  fra.me.meth = LOCATE_parser___ReduceAction594___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25438 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25438);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:25441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25441);
-    nit_exit(1);
-  }
-  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:25443 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25443);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:25444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25445 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:25448 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:25449 */
-  } else {
-    /* ./parser//parser.nit:25451 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25458);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25465 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction594___init(val_t p0, int* init_table){
-  int itpos598 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction594].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos598]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25467;
-  fra.me.meth = LOCATE_parser___ReduceAction594___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25467 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos598] = 1;
-  return;
-}
-void parser___ReduceAction595___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 = 25471;
-  fra.me.meth = LOCATE_parser___ReduceAction595___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25479 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25479);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25485 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25485);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25492 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction595___init(val_t p0, int* init_table){
-  int itpos599 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction595].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos599]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25494;
-  fra.me.meth = LOCATE_parser___ReduceAction595___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25494 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos599] = 1;
-  return;
-}
-void parser___ReduceAction596___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 = 25498;
-  fra.me.meth = LOCATE_parser___ReduceAction596___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25505 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25505);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25511);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25518 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction596___init(val_t p0, int* init_table){
-  int itpos600 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction596].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos600]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25520;
-  fra.me.meth = LOCATE_parser___ReduceAction596___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25520 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos600] = 1;
-  return;
-}
-void parser___ReduceAction597___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 = 25524;
-  fra.me.meth = LOCATE_parser___ReduceAction597___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:25530 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25530);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25532);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(41);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25539 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction597___init(val_t p0, int* init_table){
-  int itpos601 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction597].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos601]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25541;
-  fra.me.meth = LOCATE_parser___ReduceAction597___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25541 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos601] = 1;
-  return;
-}
-void parser___ReduceAction598___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 = 25545;
-  fra.me.meth = LOCATE_parser___ReduceAction598___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25558 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25558);
-    nit_exit(1);
-  }
-  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:25560 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25560);
-    nit_exit(1);
-  }
-  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:25562 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25562);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25565 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25565);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:25566 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25567 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25580 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction598___init(val_t p0, int* init_table){
-  int itpos602 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction598].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos602]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25582;
-  fra.me.meth = LOCATE_parser___ReduceAction598___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25582 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos602] = 1;
-  return;
-}
-void parser___ReduceAction599___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 25586;
-  fra.me.meth = LOCATE_parser___ReduceAction599___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25600);
-    nit_exit(1);
-  }
-  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:25602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25602);
-    nit_exit(1);
-  }
-  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:25604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25604);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:25607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25607);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:25609 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25609);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25611 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:25614 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:25615 */
-  } else {
-    /* ./parser//parser.nit:25617 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25631 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction599___init(val_t p0, int* init_table){
-  int itpos603 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction599].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos603]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25633;
-  fra.me.meth = LOCATE_parser___ReduceAction599___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25633 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos603] = 1;
-  return;
-}
-void parser___ReduceAction600___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 = 25637;
-  fra.me.meth = LOCATE_parser___ReduceAction600___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25648);
-    nit_exit(1);
-  }
-  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:25650 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25650);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:25652 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25652);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25665 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction600___init(val_t p0, int* init_table){
-  int itpos604 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction600].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos604]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25667;
-  fra.me.meth = LOCATE_parser___ReduceAction600___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25667 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos604] = 1;
-  return;
-}
-void parser___ReduceAction601___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 = 25671;
-  fra.me.meth = LOCATE_parser___ReduceAction601___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25681);
-    nit_exit(1);
-  }
-  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:25683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25683);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:25685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25685);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25698 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction601___init(val_t p0, int* init_table){
-  int itpos605 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction601].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos605]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25700;
-  fra.me.meth = LOCATE_parser___ReduceAction601___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25700 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos605] = 1;
-  return;
-}
-void parser___ReduceAction602___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 25704;
-  fra.me.meth = LOCATE_parser___ReduceAction602___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25718);
-    nit_exit(1);
-  }
-  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:25720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25720);
-    nit_exit(1);
-  }
-  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:25722 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25722);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:25725 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25725);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25727 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25733 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25733);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25742 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction602___init(val_t p0, int* init_table){
-  int itpos606 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction602].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos606]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25744;
-  fra.me.meth = LOCATE_parser___ReduceAction602___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25744 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos606] = 1;
-  return;
-}
-void parser___ReduceAction603___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 25748;
-  fra.me.meth = LOCATE_parser___ReduceAction603___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25763);
-    nit_exit(1);
-  }
-  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:25765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25765);
-    nit_exit(1);
-  }
-  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:25767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25767);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:25770 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25770);
-    nit_exit(1);
-  }
-  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:25772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25772);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:25773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25774 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:25777 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:25778 */
-  } else {
-    /* ./parser//parser.nit:25780 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25787 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25787);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25796 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction603___init(val_t p0, int* init_table){
-  int itpos607 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction603].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos607]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25798;
-  fra.me.meth = LOCATE_parser___ReduceAction603___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25798 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos607] = 1;
-  return;
-}
-void parser___ReduceAction604___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 = 25802;
-  fra.me.meth = LOCATE_parser___ReduceAction604___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25814);
-    nit_exit(1);
-  }
-  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:25816 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25816);
-    nit_exit(1);
-  }
-  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:25818 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25818);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25824 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25824);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25833 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction604___init(val_t p0, int* init_table){
-  int itpos608 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction604].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos608]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25835;
-  fra.me.meth = LOCATE_parser___ReduceAction604___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25835 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos608] = 1;
-  return;
-}
-void parser___ReduceAction605___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 = 25839;
-  fra.me.meth = LOCATE_parser___ReduceAction605___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25850);
-    nit_exit(1);
-  }
-  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:25852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25852);
-    nit_exit(1);
-  }
-  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:25854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25854);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:25860 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25860);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25869 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction605___init(val_t p0, int* init_table){
-  int itpos609 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction605].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos609]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25871;
-  fra.me.meth = LOCATE_parser___ReduceAction605___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25871 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos609] = 1;
-  return;
-}
-void parser___ReduceAction606___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 = 25875;
-  fra.me.meth = LOCATE_parser___ReduceAction606___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:25885 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25885);
-    nit_exit(1);
-  }
-  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:25887 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25887);
-    nit_exit(1);
-  }
-  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:25889 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25889);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25891);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(42);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25900 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction606___init(val_t p0, int* init_table){
-  int itpos610 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction606].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos610]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25902;
-  fra.me.meth = LOCATE_parser___ReduceAction606___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25902 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos610] = 1;
-  return;
-}
-void parser___ReduceAction607___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_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 = 25906;
-  fra.me.meth = LOCATE_parser___ReduceAction607___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:25923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25923);
-    nit_exit(1);
-  }
-  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:25925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25925);
-    nit_exit(1);
-  }
-  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:25927 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25927);
-    nit_exit(1);
-  }
-  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:25929 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25929);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:25932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25932);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:25933 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25934 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:25948 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction607___init(val_t p0, int* init_table){
-  int itpos611 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction607].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos611]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 25950;
-  fra.me.meth = LOCATE_parser___ReduceAction607___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:25950 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos611] = 1;
-  return;
-}
-void parser___ReduceAction608___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 25954;
-  fra.me.meth = LOCATE_parser___ReduceAction608___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:25972 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25972);
-    nit_exit(1);
-  }
-  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:25974 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25974);
-    nit_exit(1);
-  }
-  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:25976 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25976);
-    nit_exit(1);
-  }
-  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:25978 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25978);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:25981 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25981);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:25983 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 25983);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:25984 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:25985 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:25988 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:25989 */
-  } else {
-    /* ./parser//parser.nit:25991 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  fra.me.REG[8] = 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[8], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26006 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction608___init(val_t p0, int* init_table){
-  int itpos612 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction608].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos612]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26008;
-  fra.me.meth = LOCATE_parser___ReduceAction608___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26008 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos612] = 1;
-  return;
-}
-void parser___ReduceAction609___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 = 26012;
-  fra.me.meth = LOCATE_parser___ReduceAction609___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:26027 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26027);
-    nit_exit(1);
-  }
-  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:26029 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26029);
-    nit_exit(1);
-  }
-  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:26031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26031);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:26033 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26033);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26047 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction609___init(val_t p0, int* init_table){
-  int itpos613 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction609].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos613]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26049;
-  fra.me.meth = LOCATE_parser___ReduceAction609___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26049 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos613] = 1;
-  return;
-}
-void parser___ReduceAction610___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 = 26053;
-  fra.me.meth = LOCATE_parser___ReduceAction610___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:26067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26067);
-    nit_exit(1);
-  }
-  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:26069 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26069);
-    nit_exit(1);
-  }
-  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:26071 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26071);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:26073 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26073);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26087 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction610___init(val_t p0, int* init_table){
-  int itpos614 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction610].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos614]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26089;
-  fra.me.meth = LOCATE_parser___ReduceAction610___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26089 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos614] = 1;
-  return;
-}
-void parser___ReduceAction611___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_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 = 26093;
-  fra.me.meth = LOCATE_parser___ReduceAction611___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26111 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26111);
-    nit_exit(1);
-  }
-  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:26113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26113);
-    nit_exit(1);
-  }
-  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:26115 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26115);
-    nit_exit(1);
-  }
-  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:26117 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26117);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:26120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26120);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:26121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:26122 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:26128 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26128);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26138 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction611___init(val_t p0, int* init_table){
-  int itpos615 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction611].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos615]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26140;
-  fra.me.meth = LOCATE_parser___ReduceAction611___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26140 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos615] = 1;
-  return;
-}
-void parser___ReduceAction612___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_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 = 26144;
-  fra.me.meth = LOCATE_parser___ReduceAction612___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26163 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26163);
-    nit_exit(1);
-  }
-  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:26165 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26165);
-    nit_exit(1);
-  }
-  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:26167 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26167);
-    nit_exit(1);
-  }
-  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:26169 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26169);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:26172 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26172);
-    nit_exit(1);
-  }
-  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:26174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26174);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:26175 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:26176 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:26179 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:26180 */
-  } else {
-    /* ./parser//parser.nit:26182 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  fra.me.REG[9] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:26189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26189);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[9], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26199 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction612___init(val_t p0, int* init_table){
-  int itpos616 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction612].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos616]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26201;
-  fra.me.meth = LOCATE_parser___ReduceAction612___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26201 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos616] = 1;
-  return;
-}
-void parser___ReduceAction613___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 = 26205;
-  fra.me.meth = LOCATE_parser___ReduceAction613___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:26221 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26221);
-    nit_exit(1);
-  }
-  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:26223 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26223);
-    nit_exit(1);
-  }
-  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:26225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26225);
-    nit_exit(1);
-  }
-  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:26227 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26227);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:26233 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26233);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26243 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction613___init(val_t p0, int* init_table){
-  int itpos617 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction613].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos617]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26245;
-  fra.me.meth = LOCATE_parser___ReduceAction613___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26245 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos617] = 1;
-  return;
-}
-void parser___ReduceAction614___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 = 26249;
-  fra.me.meth = LOCATE_parser___ReduceAction614___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:26264 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26264);
-    nit_exit(1);
-  }
-  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:26266 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26266);
-    nit_exit(1);
-  }
-  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:26268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26268);
-    nit_exit(1);
-  }
-  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:26270 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26270);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:26276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26276);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26286 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction614___init(val_t p0, int* init_table){
-  int itpos618 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction614].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos618]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26288;
-  fra.me.meth = LOCATE_parser___ReduceAction614___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26288 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos618] = 1;
-  return;
-}
-void parser___ReduceAction615___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 = 26292;
-  fra.me.meth = LOCATE_parser___ReduceAction615___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:26306 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26306);
-    nit_exit(1);
-  }
-  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:26308 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26308);
-    nit_exit(1);
-  }
-  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:26310 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26310);
-    nit_exit(1);
-  }
-  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:26312 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26312);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26314);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(43);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26324 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction615___init(val_t p0, int* init_table){
-  int itpos619 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction615].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos619]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26326;
-  fra.me.meth = LOCATE_parser___ReduceAction615___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26326 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos619] = 1;
-  return;
-}
-void parser___ReduceAction616___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 = 26330;
-  fra.me.meth = LOCATE_parser___ReduceAction616___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26338 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26338);
-    nit_exit(1);
-  }
-  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:26340 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26340);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26342 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26342);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(44);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26350 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction616___init(val_t p0, int* init_table){
-  int itpos620 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction616].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos620]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26352;
-  fra.me.meth = LOCATE_parser___ReduceAction616___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26352 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos620] = 1;
-  return;
-}
-void parser___ReduceAction617___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 = 26356;
-  fra.me.meth = LOCATE_parser___ReduceAction617___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26365);
-    nit_exit(1);
-  }
-  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:26367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26367);
-    nit_exit(1);
-  }
-  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:26369 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26369);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26371);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(44);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26379 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction617___init(val_t p0, int* init_table){
-  int itpos621 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction617].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos621]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26381;
-  fra.me.meth = LOCATE_parser___ReduceAction617___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26381 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos621] = 1;
-  return;
-}
-void parser___ReduceAction618___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 = 26385;
-  fra.me.meth = LOCATE_parser___ReduceAction618___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
-  /* ./parser//parser.nit:26391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26391);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26393 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26393);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[3], NIT_NULL, fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(44);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26401 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction618___init(val_t p0, int* init_table){
-  int itpos622 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction618].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos622]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26403;
-  fra.me.meth = LOCATE_parser___ReduceAction618___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26403 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos622] = 1;
-  return;
-}
-void parser___ReduceAction619___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 = 26407;
-  fra.me.meth = LOCATE_parser___ReduceAction619___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26414);
-    nit_exit(1);
-  }
-  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:26416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26416);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26418);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(44);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26426 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction619___init(val_t p0, int* init_table){
-  int itpos623 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction619].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos623]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26428;
-  fra.me.meth = LOCATE_parser___ReduceAction619___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26428 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos623] = 1;
-  return;
-}
-void parser___ReduceAction620___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 = 26432;
-  fra.me.meth = LOCATE_parser___ReduceAction620___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:26438 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26438);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(45);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26440 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction620___init(val_t p0, int* init_table){
-  int itpos624 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction620].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos624]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26442;
-  fra.me.meth = LOCATE_parser___ReduceAction620___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26442 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos624] = 1;
-  return;
-}
-void parser___ReduceAction621___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 = 26446;
-  fra.me.meth = LOCATE_parser___ReduceAction621___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26451 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26451);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(46);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26453 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction621___init(val_t p0, int* init_table){
-  int itpos625 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction621].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos625]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26455;
-  fra.me.meth = LOCATE_parser___ReduceAction621___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26455 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos625] = 1;
-  return;
-}
-void parser___ReduceAction622___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 = 26459;
-  fra.me.meth = LOCATE_parser___ReduceAction622___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:26471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26471);
-    nit_exit(1);
-  }
-  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:26473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26473);
-    nit_exit(1);
-  }
-  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:26475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26475);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:26477 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:26478 */
-  } else {
-    /* ./parser//parser.nit:26480 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:26484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26484);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:26486 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:26487 */
-  } else {
-    /* ./parser//parser.nit:26489 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(46);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26499 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction622___init(val_t p0, int* init_table){
-  int itpos626 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction622].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos626]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26501;
-  fra.me.meth = LOCATE_parser___ReduceAction622___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26501 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos626] = 1;
-  return;
-}
-void parser___ReduceAction623___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 = 26505;
-  fra.me.meth = LOCATE_parser___ReduceAction623___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:26516 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26516);
-    nit_exit(1);
-  }
-  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:26518 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26518);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:26520 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:26521 */
-  } else {
-    /* ./parser//parser.nit:26523 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:26527 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26527);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:26529 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:26530 */
-  } else {
-    /* ./parser//parser.nit:26532 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(46);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26542 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction623___init(val_t p0, int* init_table){
-  int itpos627 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction623].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos627]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26544;
-  fra.me.meth = LOCATE_parser___ReduceAction623___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26544 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos627] = 1;
-  return;
-}
-void parser___ReduceAction624___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 = 26548;
-  fra.me.meth = LOCATE_parser___ReduceAction624___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:26557 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26557);
-    nit_exit(1);
-  }
-  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:26559 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26559);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:26561 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:26562 */
-  } else {
-    /* ./parser//parser.nit:26564 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:26568 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26568);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:26570 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:26571 */
-  } else {
-    /* ./parser//parser.nit:26573 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(46);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26582 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction624___init(val_t p0, int* init_table){
-  int itpos628 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction624].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos628]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26584;
-  fra.me.meth = LOCATE_parser___ReduceAction624___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26584 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos628] = 1;
-  return;
-}
-void parser___ReduceAction625___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 = 26588;
-  fra.me.meth = LOCATE_parser___ReduceAction625___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26593 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26593);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(47);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26595 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction625___init(val_t p0, int* init_table){
-  int itpos629 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction625].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos629]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26597;
-  fra.me.meth = LOCATE_parser___ReduceAction625___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26597 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos629] = 1;
-  return;
-}
-void parser___ReduceAction626___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 = 26601;
-  fra.me.meth = LOCATE_parser___ReduceAction626___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:26616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26616);
-    nit_exit(1);
-  }
-  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:26618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26618);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
-  /* ./parser//parser.nit:26620 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26620);
-    nit_exit(1);
-  }
-  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:26622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26622);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
-  /* ./parser//parser.nit:26624 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26624);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26626);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(47);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26636 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction626___init(val_t p0, int* init_table){
-  int itpos630 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction626].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos630]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26638;
-  fra.me.meth = LOCATE_parser___ReduceAction626___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26638 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos630] = 1;
-  return;
-}
-void parser___ReduceAction627___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 = 26642;
-  fra.me.meth = LOCATE_parser___ReduceAction627___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26647);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(48);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26649 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction627___init(val_t p0, int* init_table){
-  int itpos631 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction627].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos631]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26651;
-  fra.me.meth = LOCATE_parser___ReduceAction627___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26651 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos631] = 1;
-  return;
-}
-void parser___ReduceAction628___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 = 26655;
-  fra.me.meth = LOCATE_parser___ReduceAction628___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26663 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26663);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26665 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26665);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(48);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26671 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction628___init(val_t p0, int* init_table){
-  int itpos632 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction628].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos632]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26673;
-  fra.me.meth = LOCATE_parser___ReduceAction628___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26673 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos632] = 1;
-  return;
-}
-void parser___ReduceAction629___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 = 26677;
-  fra.me.meth = LOCATE_parser___ReduceAction629___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26685);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26687);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(48);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26693 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction629___init(val_t p0, int* init_table){
-  int itpos633 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction629].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos633]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26695;
-  fra.me.meth = LOCATE_parser___ReduceAction629___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26695 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos633] = 1;
-  return;
-}
-void parser___ReduceAction630___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 = 26699;
-  fra.me.meth = LOCATE_parser___ReduceAction630___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26704 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26704);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(49);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26706 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction630___init(val_t p0, int* init_table){
-  int itpos634 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction630].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos634]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26708;
-  fra.me.meth = LOCATE_parser___ReduceAction630___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26708 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos634] = 1;
-  return;
-}
-void parser___ReduceAction631___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 = 26712;
-  fra.me.meth = LOCATE_parser___ReduceAction631___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:26719 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26719);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26721 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26721);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(49);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26727 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction631___init(val_t p0, int* init_table){
-  int itpos635 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction631].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos635]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26729;
-  fra.me.meth = LOCATE_parser___ReduceAction631___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26729 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos635] = 1;
-  return;
-}
-void parser___ReduceAction632___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 = 26733;
-  fra.me.meth = LOCATE_parser___ReduceAction632___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26738 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26738);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26740 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction632___init(val_t p0, int* init_table){
-  int itpos636 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction632].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos636]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26742;
-  fra.me.meth = LOCATE_parser___ReduceAction632___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26742 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos636] = 1;
-  return;
-}
-void parser___ReduceAction633___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 = 26746;
-  fra.me.meth = LOCATE_parser___ReduceAction633___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26754);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26756);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26762 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction633___init(val_t p0, int* init_table){
-  int itpos637 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction633].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos637]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26764;
-  fra.me.meth = LOCATE_parser___ReduceAction633___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26764 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos637] = 1;
-  return;
-}
-void parser___ReduceAction634___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 = 26768;
-  fra.me.meth = LOCATE_parser___ReduceAction634___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26776 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26776);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26778);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26784 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction634___init(val_t p0, int* init_table){
-  int itpos638 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction634].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos638]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26786;
-  fra.me.meth = LOCATE_parser___ReduceAction634___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26786 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos638] = 1;
-  return;
-}
-void parser___ReduceAction635___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 = 26790;
-  fra.me.meth = LOCATE_parser___ReduceAction635___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26798 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26798);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26800 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26800);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26806 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction635___init(val_t p0, int* init_table){
-  int itpos639 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction635].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos639]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26808;
-  fra.me.meth = LOCATE_parser___ReduceAction635___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26808 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos639] = 1;
-  return;
-}
-void parser___ReduceAction636___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 = 26812;
-  fra.me.meth = LOCATE_parser___ReduceAction636___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26820 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26820);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26822 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26822);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26828 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction636___init(val_t p0, int* init_table){
-  int itpos640 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction636].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos640]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26830;
-  fra.me.meth = LOCATE_parser___ReduceAction636___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26830 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos640] = 1;
-  return;
-}
-void parser___ReduceAction637___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 = 26834;
-  fra.me.meth = LOCATE_parser___ReduceAction637___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26842 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26842);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26844 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26844);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26850 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction637___init(val_t p0, int* init_table){
-  int itpos641 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction637].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos641]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26852;
-  fra.me.meth = LOCATE_parser___ReduceAction637___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26852 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos641] = 1;
-  return;
-}
-void parser___ReduceAction638___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 = 26856;
-  fra.me.meth = LOCATE_parser___ReduceAction638___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26864);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26866);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26872 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction638___init(val_t p0, int* init_table){
-  int itpos642 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction638].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos642]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26874;
-  fra.me.meth = LOCATE_parser___ReduceAction638___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26874 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos642] = 1;
-  return;
-}
-void parser___ReduceAction639___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 = 26878;
-  fra.me.meth = LOCATE_parser___ReduceAction639___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26886 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26886);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26888);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26894 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction639___init(val_t p0, int* init_table){
-  int itpos643 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction639].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos643]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26896;
-  fra.me.meth = LOCATE_parser___ReduceAction639___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26896 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos643] = 1;
-  return;
-}
-void parser___ReduceAction640___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 = 26900;
-  fra.me.meth = LOCATE_parser___ReduceAction640___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26908);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26910);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26916 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction640___init(val_t p0, int* init_table){
-  int itpos644 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction640].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos644]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26918;
-  fra.me.meth = LOCATE_parser___ReduceAction640___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26918 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos644] = 1;
-  return;
-}
-void parser___ReduceAction641___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 = 26922;
-  fra.me.meth = LOCATE_parser___ReduceAction641___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26930);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:26932 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26932);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(50);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26938 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction641___init(val_t p0, int* init_table){
-  int itpos645 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction641].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos645]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26940;
-  fra.me.meth = LOCATE_parser___ReduceAction641___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26940 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos645] = 1;
-  return;
-}
-void parser___ReduceAction642___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 = 26944;
-  fra.me.meth = LOCATE_parser___ReduceAction642___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26949);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(51);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26951 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction642___init(val_t p0, int* init_table){
-  int itpos646 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction642].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos646]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26953;
-  fra.me.meth = LOCATE_parser___ReduceAction642___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26953 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos646] = 1;
-  return;
-}
-void parser___ReduceAction643___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 = 26957;
-  fra.me.meth = LOCATE_parser___ReduceAction643___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26965 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26965);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26967 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26967);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(51);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26973 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction643___init(val_t p0, int* init_table){
-  int itpos647 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction643].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos647]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26975;
-  fra.me.meth = LOCATE_parser___ReduceAction643___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26975 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos647] = 1;
-  return;
-}
-void parser___ReduceAction644___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 = 26979;
-  fra.me.meth = LOCATE_parser___ReduceAction644___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:26987 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26987);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:26989 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 26989);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(51);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:26995 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction644___init(val_t p0, int* init_table){
-  int itpos648 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction644].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos648]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 26997;
-  fra.me.meth = LOCATE_parser___ReduceAction644___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:26997 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos648] = 1;
-  return;
-}
-void parser___ReduceAction645___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 = 27001;
-  fra.me.meth = LOCATE_parser___ReduceAction645___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27006);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(52);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27008 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction645___init(val_t p0, int* init_table){
-  int itpos649 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction645].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos649]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27010;
-  fra.me.meth = LOCATE_parser___ReduceAction645___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27010 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos649] = 1;
-  return;
-}
-void parser___ReduceAction646___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 = 27014;
-  fra.me.meth = LOCATE_parser___ReduceAction646___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27022 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27022);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27024 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27024);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(52);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27030 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction646___init(val_t p0, int* init_table){
-  int itpos650 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction646].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos650]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27032;
-  fra.me.meth = LOCATE_parser___ReduceAction646___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27032 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos650] = 1;
-  return;
-}
-void parser___ReduceAction647___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 = 27036;
-  fra.me.meth = LOCATE_parser___ReduceAction647___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27044 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27044);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27046 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27046);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(52);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27052 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction647___init(val_t p0, int* init_table){
-  int itpos651 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction647].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos651]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27054;
-  fra.me.meth = LOCATE_parser___ReduceAction647___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27054 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos651] = 1;
-  return;
-}
-void parser___ReduceAction648___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 = 27058;
-  fra.me.meth = LOCATE_parser___ReduceAction648___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27066);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27068 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27068);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(52);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27074 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction648___init(val_t p0, int* init_table){
-  int itpos652 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction648].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos652]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27076;
-  fra.me.meth = LOCATE_parser___ReduceAction648___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27076 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos652] = 1;
-  return;
-}
-void parser___ReduceAction649___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 = 27080;
-  fra.me.meth = LOCATE_parser___ReduceAction649___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27085 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27085);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(53);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27087 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction649___init(val_t p0, int* init_table){
-  int itpos653 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction649].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos653]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27089;
-  fra.me.meth = LOCATE_parser___ReduceAction649___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27089 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos653] = 1;
-  return;
-}
-void parser___ReduceAction650___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 = 27093;
-  fra.me.meth = LOCATE_parser___ReduceAction650___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27100 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27100);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27102);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(53);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27108 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction650___init(val_t p0, int* init_table){
-  int itpos654 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction650].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos654]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27110;
-  fra.me.meth = LOCATE_parser___ReduceAction650___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27110 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos654] = 1;
-  return;
-}
-void parser___ReduceAction651___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 = 27114;
-  fra.me.meth = LOCATE_parser___ReduceAction651___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
-  /* ./parser//parser.nit:27121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27121);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27123);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(53);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27129 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction651___init(val_t p0, int* init_table){
-  int itpos655 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction651].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos655]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27131;
-  fra.me.meth = LOCATE_parser___ReduceAction651___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27131 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos655] = 1;
-  return;
-}
-void parser___ReduceAction652___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 = 27135;
-  fra.me.meth = LOCATE_parser___ReduceAction652___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27140);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(54);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27142 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction652___init(val_t p0, int* init_table){
-  int itpos656 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction652].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos656]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27144;
-  fra.me.meth = LOCATE_parser___ReduceAction652___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27144 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos656] = 1;
-  return;
-}
-void parser___ReduceAction653___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 = 27148;
-  fra.me.meth = LOCATE_parser___ReduceAction653___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  /* ./parser//parser.nit:27157 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27157);
-    nit_exit(1);
-  }
-  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:27159 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27159);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27161 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27161);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27163 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:27164 */
-  } else {
-    /* ./parser//parser.nit:27166 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(54);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27176 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction653___init(val_t p0, int* init_table){
-  int itpos657 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction653].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos657]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27178;
-  fra.me.meth = LOCATE_parser___ReduceAction653___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27178 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos657] = 1;
-  return;
-}
-void parser___ReduceAction654___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 = 27182;
-  fra.me.meth = LOCATE_parser___ReduceAction654___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27191);
-    nit_exit(1);
-  }
-  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:27193 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27193);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:27195 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27195);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(54);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27202 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction654___init(val_t p0, int* init_table){
-  int itpos658 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction654].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos658]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27204;
-  fra.me.meth = LOCATE_parser___ReduceAction654___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27204 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos658] = 1;
-  return;
-}
-void parser___ReduceAction655___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 = 27208;
-  fra.me.meth = LOCATE_parser___ReduceAction655___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
-  /* ./parser//parser.nit:27214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27214);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:27218 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27218);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(54);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27225 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction655___init(val_t p0, int* init_table){
-  int itpos659 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction655].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos659]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27227;
-  fra.me.meth = LOCATE_parser___ReduceAction655___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27227 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos659] = 1;
-  return;
-}
-void parser___ReduceAction656___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 = 27231;
-  fra.me.meth = LOCATE_parser___ReduceAction656___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27239 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27239);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:27241 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27241);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27247 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction656___init(val_t p0, int* init_table){
-  int itpos660 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction656].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos660]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27249;
-  fra.me.meth = LOCATE_parser___ReduceAction656___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27249 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos660] = 1;
-  return;
-}
-void parser___ReduceAction657___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 = 27253;
-  fra.me.meth = LOCATE_parser___ReduceAction657___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:27260 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27260);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27266 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction657___init(val_t p0, int* init_table){
-  int itpos661 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction657].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos661]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27268;
-  fra.me.meth = LOCATE_parser___ReduceAction657___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27268 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos661] = 1;
-  return;
-}
-void parser___ReduceAction658___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 = 27272;
-  fra.me.meth = LOCATE_parser___ReduceAction658___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:27283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27283);
-    nit_exit(1);
-  }
-  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:27285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27285);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27287 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27287);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27289 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:27290 */
-  } else {
-    /* ./parser//parser.nit:27292 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27302 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction658___init(val_t p0, int* init_table){
-  int itpos662 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction658].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos662]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27304;
-  fra.me.meth = LOCATE_parser___ReduceAction658___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27304 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos662] = 1;
-  return;
-}
-void parser___ReduceAction659___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 = 27308;
-  fra.me.meth = LOCATE_parser___ReduceAction659___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:27318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27318);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27320);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:27322 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:27323 */
-  } else {
-    /* ./parser//parser.nit:27325 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27335 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction659___init(val_t p0, int* init_table){
-  int itpos663 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction659].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos663]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27337;
-  fra.me.meth = LOCATE_parser___ReduceAction659___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27337 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos663] = 1;
-  return;
-}
-void parser___ReduceAction660___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 = 27341;
-  fra.me.meth = LOCATE_parser___ReduceAction660___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:27348 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27348);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27350 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27350);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:27352 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:27353 */
-  } else {
-    /* ./parser//parser.nit:27355 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27364 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction660___init(val_t p0, int* init_table){
-  int itpos664 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction660].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos664]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27366;
-  fra.me.meth = LOCATE_parser___ReduceAction660___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27366 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos664] = 1;
-  return;
-}
-void parser___ReduceAction661___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 = 27370;
-  fra.me.meth = LOCATE_parser___ReduceAction661___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:27378 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27378);
-    nit_exit(1);
-  }
-  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:27380 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27380);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27382 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27382);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27384 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:27385 */
-  } else {
-    /* ./parser//parser.nit:27387 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27396 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction661___init(val_t p0, int* init_table){
-  int itpos665 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction661].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos665]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27398;
-  fra.me.meth = LOCATE_parser___ReduceAction661___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27398 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos665] = 1;
-  return;
-}
-void parser___ReduceAction662___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 = 27402;
-  fra.me.meth = LOCATE_parser___ReduceAction662___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:27412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27412);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:27414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27414);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27416);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27418 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:27419 */
-  } else {
-    /* ./parser//parser.nit:27421 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27430 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction662___init(val_t p0, int* init_table){
-  int itpos666 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction662].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos666]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27432;
-  fra.me.meth = LOCATE_parser___ReduceAction662___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27432 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos666] = 1;
-  return;
-}
-void parser___ReduceAction663___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 = 27436;
-  fra.me.meth = LOCATE_parser___ReduceAction663___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:27445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27445);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27447 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27447);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:27449 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:27450 */
-  } else {
-    /* ./parser//parser.nit:27452 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27461 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction663___init(val_t p0, int* init_table){
-  int itpos667 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction663].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos667]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27463;
-  fra.me.meth = LOCATE_parser___ReduceAction663___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27463 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos667] = 1;
-  return;
-}
-void parser___ReduceAction664___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 = 27467;
-  fra.me.meth = LOCATE_parser___ReduceAction664___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:27475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27475);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27477);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:27479 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:27480 */
-  } else {
-    /* ./parser//parser.nit:27482 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27491 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction664___init(val_t p0, int* init_table){
-  int itpos668 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction664].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos668]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27493;
-  fra.me.meth = LOCATE_parser___ReduceAction664___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27493 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos668] = 1;
-  return;
-}
-void parser___ReduceAction665___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 = 27497;
-  fra.me.meth = LOCATE_parser___ReduceAction665___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:27509 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27509);
-    nit_exit(1);
-  }
-  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:27511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27511);
-    nit_exit(1);
-  }
-  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:27513 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27513);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27515 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27515);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:27517 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:27518 */
-  } else {
-    /* ./parser//parser.nit:27520 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27530 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction665___init(val_t p0, int* init_table){
-  int itpos669 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction665].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos669]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27532;
-  fra.me.meth = LOCATE_parser___ReduceAction665___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27532 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos669] = 1;
-  return;
-}
-void parser___ReduceAction666___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 = 27536;
-  fra.me.meth = LOCATE_parser___ReduceAction666___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27549);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27551);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACrangeExpr_parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27557 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction666___init(val_t p0, int* init_table){
-  int itpos670 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction666].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos670]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27559;
-  fra.me.meth = LOCATE_parser___ReduceAction666___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27559 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos670] = 1;
-  return;
-}
-void parser___ReduceAction667___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 = 27563;
-  fra.me.meth = LOCATE_parser___ReduceAction667___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27576 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27576);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27578 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27578);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AOrangeExpr_parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27584 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction667___init(val_t p0, int* init_table){
-  int itpos671 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction667].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos671]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27586;
-  fra.me.meth = LOCATE_parser___ReduceAction667___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27586 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos671] = 1;
-  return;
-}
-void parser___ReduceAction668___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 = 27590;
-  fra.me.meth = LOCATE_parser___ReduceAction668___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:27596 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27596);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:27598 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:27599 */
-  } else {
-    /* ./parser//parser.nit:27601 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27608 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction668___init(val_t p0, int* init_table){
-  int itpos672 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction668].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos672]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27610;
-  fra.me.meth = LOCATE_parser___ReduceAction668___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27610 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos672] = 1;
-  return;
-}
-void parser___ReduceAction669___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 = 27614;
-  fra.me.meth = LOCATE_parser___ReduceAction669___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
-  /* ./parser//parser.nit:27619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27619);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27624 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction669___init(val_t p0, int* init_table){
-  int itpos673 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction669].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos673]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27626;
-  fra.me.meth = LOCATE_parser___ReduceAction669___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27626 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos673] = 1;
-  return;
-}
-void parser___ReduceAction670___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 = 27630;
-  fra.me.meth = LOCATE_parser___ReduceAction670___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
-  /* ./parser//parser.nit:27635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27635);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27640 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction670___init(val_t p0, int* init_table){
-  int itpos674 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction670].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos674]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27642;
-  fra.me.meth = LOCATE_parser___ReduceAction670___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27642 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos674] = 1;
-  return;
-}
-void parser___ReduceAction671___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 = 27646;
-  fra.me.meth = LOCATE_parser___ReduceAction671___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
-  /* ./parser//parser.nit:27651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27651);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27656 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction671___init(val_t p0, int* init_table){
-  int itpos675 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction671].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos675]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27658;
-  fra.me.meth = LOCATE_parser___ReduceAction671___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27658 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos675] = 1;
-  return;
-}
-void parser___ReduceAction672___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 = 27662;
-  fra.me.meth = LOCATE_parser___ReduceAction672___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:27667 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27667);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27672 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction672___init(val_t p0, int* init_table){
-  int itpos676 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction672].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos676]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27674;
-  fra.me.meth = LOCATE_parser___ReduceAction672___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27674 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos676] = 1;
-  return;
-}
-void parser___ReduceAction673___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 = 27678;
-  fra.me.meth = LOCATE_parser___ReduceAction673___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
-  /* ./parser//parser.nit:27683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27683);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27688 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction673___init(val_t p0, int* init_table){
-  int itpos677 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction673].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos677]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27690;
-  fra.me.meth = LOCATE_parser___ReduceAction673___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27690 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos677] = 1;
-  return;
-}
-void parser___ReduceAction674___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 = 27694;
-  fra.me.meth = LOCATE_parser___ReduceAction674___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
-  /* ./parser//parser.nit:27699 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27699);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27704 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction674___init(val_t p0, int* init_table){
-  int itpos678 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction674].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos678]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27706;
-  fra.me.meth = LOCATE_parser___ReduceAction674___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27706 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos678] = 1;
-  return;
-}
-void parser___ReduceAction675___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 = 27710;
-  fra.me.meth = LOCATE_parser___ReduceAction675___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
-  /* ./parser//parser.nit:27715 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27715);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27720 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction675___init(val_t p0, int* init_table){
-  int itpos679 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction675].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos679]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27722;
-  fra.me.meth = LOCATE_parser___ReduceAction675___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27722 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos679] = 1;
-  return;
-}
-void parser___ReduceAction676___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 = 27726;
-  fra.me.meth = LOCATE_parser___ReduceAction676___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:27731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27731);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27736 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction676___init(val_t p0, int* init_table){
-  int itpos680 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction676].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos680]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27738;
-  fra.me.meth = LOCATE_parser___ReduceAction676___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27738 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos680] = 1;
-  return;
-}
-void parser___ReduceAction677___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 = 27742;
-  fra.me.meth = LOCATE_parser___ReduceAction677___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27747 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27747);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27749 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction677___init(val_t p0, int* init_table){
-  int itpos681 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction677].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos681]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27751;
-  fra.me.meth = LOCATE_parser___ReduceAction677___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27751 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos681] = 1;
-  return;
-}
-void parser___ReduceAction678___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 = 27755;
-  fra.me.meth = LOCATE_parser___ReduceAction678___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27762 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27762);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27764 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction678___init(val_t p0, int* init_table){
-  int itpos682 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction678].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos682]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27766;
-  fra.me.meth = LOCATE_parser___ReduceAction678___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27766 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos682] = 1;
-  return;
-}
-void parser___ReduceAction679___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 = 27770;
-  fra.me.meth = LOCATE_parser___ReduceAction679___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27784);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  /* ./parser//parser.nit:27786 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27786);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:27788 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27788);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27795 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction679___init(val_t p0, int* init_table){
-  int itpos683 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction679].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos683]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27797;
-  fra.me.meth = LOCATE_parser___ReduceAction679___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27797 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos683] = 1;
-  return;
-}
-void parser___ReduceAction680___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 = 27801;
-  fra.me.meth = LOCATE_parser___ReduceAction680___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:27817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27817);
-    nit_exit(1);
-  }
-  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:27819 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27819);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:27821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27821);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:27823 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27823);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(55);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27831 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction680___init(val_t p0, int* init_table){
-  int itpos684 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction680].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos684]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27833;
-  fra.me.meth = LOCATE_parser___ReduceAction680___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27833 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos684] = 1;
-  return;
-}
-void parser___ReduceAction681___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 = 27837;
-  fra.me.meth = LOCATE_parser___ReduceAction681___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:27844 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27844);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27846);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:27848 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:27849 */
-  } else {
-    /* ./parser//parser.nit:27851 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:27854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27855 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[4] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(56);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27861 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction681___init(val_t p0, int* init_table){
-  int itpos685 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction681].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos685]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27863;
-  fra.me.meth = LOCATE_parser___ReduceAction681___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27863 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos685] = 1;
-  return;
-}
-void parser___ReduceAction682___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 = 27867;
-  fra.me.meth = LOCATE_parser___ReduceAction682___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:27875 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27875);
-    nit_exit(1);
-  }
-  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:27877 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27877);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27879 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27879);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27881 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:27882 */
-  } else {
-    /* ./parser//parser.nit:27884 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:27888 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:27889 */
-  } else {
-    /* ./parser//parser.nit:27891 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:27894 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27895 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-  }
-  fra.me.REG[5] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(56);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27901 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction682___init(val_t p0, int* init_table){
-  int itpos686 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction682].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos686]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27903;
-  fra.me.meth = LOCATE_parser___ReduceAction682___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27903 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos686] = 1;
-  return;
-}
-void parser___ReduceAction683___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 = 27907;
-  fra.me.meth = LOCATE_parser___ReduceAction683___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:27916 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27916);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27918 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27918);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:27919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27920 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:27922 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27923 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(57);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27926 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction683___init(val_t p0, int* init_table){
-  int itpos687 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction683].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos687]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27928;
-  fra.me.meth = LOCATE_parser___ReduceAction683___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27928 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos687] = 1;
-  return;
-}
-void parser___ReduceAction684___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 = 27932;
-  fra.me.meth = LOCATE_parser___ReduceAction684___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TStartString, ID_TStartString)) /*cast nullable TStartString*/;
-  /* ./parser//parser.nit:27937 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27937);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AStartStringExpr_parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(58);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27942 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction684___init(val_t p0, int* init_table){
-  int itpos688 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction684].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos688]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27944;
-  fra.me.meth = LOCATE_parser___ReduceAction684___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27944 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos688] = 1;
-  return;
-}
-void parser___ReduceAction685___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 = 27948;
-  fra.me.meth = LOCATE_parser___ReduceAction685___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:27957 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27957);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:27959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27959);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:27960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27961 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:27963 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:27964 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(59);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27967 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction685___init(val_t p0, int* init_table){
-  int itpos689 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction685].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos689]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27969;
-  fra.me.meth = LOCATE_parser___ReduceAction685___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27969 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos689] = 1;
-  return;
-}
-void parser___ReduceAction686___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 = 27973;
-  fra.me.meth = LOCATE_parser___ReduceAction686___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TMidString, ID_TMidString)) /*cast nullable TMidString*/;
-  /* ./parser//parser.nit:27978 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27978);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AMidStringExpr_parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(60);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27983 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction686___init(val_t p0, int* init_table){
-  int itpos690 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction686].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos690]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 27985;
-  fra.me.meth = LOCATE_parser___ReduceAction686___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:27985 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos690] = 1;
-  return;
-}
-void parser___ReduceAction687___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 = 27989;
-  fra.me.meth = LOCATE_parser___ReduceAction687___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TEndString, ID_TEndString)) /*cast nullable TEndString*/;
-  /* ./parser//parser.nit:27994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 27994);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AEndStringExpr_parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(61);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:27999 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction687___init(val_t p0, int* init_table){
-  int itpos691 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction687].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos691]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28001;
-  fra.me.meth = LOCATE_parser___ReduceAction687___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28001 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos691] = 1;
-  return;
-}
-void parser___ReduceAction688___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28005;
-  fra.me.meth = LOCATE_parser___ReduceAction688___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28015 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28015);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28016 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28017 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(62);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28020 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction688___init(val_t p0, int* init_table){
-  int itpos692 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction688].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos692]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28022;
-  fra.me.meth = LOCATE_parser___ReduceAction688___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28022 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos692] = 1;
-  return;
-}
-void parser___ReduceAction689___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 = 28026;
-  fra.me.meth = LOCATE_parser___ReduceAction689___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:28037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28037);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28039);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:28040 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28041 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:28044 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:28045 */
-  } else {
-    /* ./parser//parser.nit:28047 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(62);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28051 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction689___init(val_t p0, int* init_table){
-  int itpos693 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction689].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos693]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28053;
-  fra.me.meth = LOCATE_parser___ReduceAction689___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28053 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos693] = 1;
-  return;
-}
-void parser___ReduceAction690___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 = 28057;
-  fra.me.meth = LOCATE_parser___ReduceAction690___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(62);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28065 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction690___init(val_t p0, int* init_table){
-  int itpos694 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction690].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos694]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28067;
-  fra.me.meth = LOCATE_parser___ReduceAction690___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28067 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos694] = 1;
-  return;
-}
-void parser___ReduceAction691___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 = 28071;
-  fra.me.meth = LOCATE_parser___ReduceAction691___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(62);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28076 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction691___init(val_t p0, int* init_table){
-  int itpos695 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction691].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos695]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28078;
-  fra.me.meth = LOCATE_parser___ReduceAction691___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28078 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos695] = 1;
-  return;
-}
-void parser___ReduceAction692___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28082;
-  fra.me.meth = LOCATE_parser___ReduceAction692___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28092);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28094 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(63);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28097 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction692___init(val_t p0, int* init_table){
-  int itpos696 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction692].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos696]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28099;
-  fra.me.meth = LOCATE_parser___ReduceAction692___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28099 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos696] = 1;
-  return;
-}
-void parser___ReduceAction693___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 = 28103;
-  fra.me.meth = LOCATE_parser___ReduceAction693___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:28114 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28114);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28116 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28116);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:28117 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28118 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:28121 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:28122 */
-  } else {
-    /* ./parser//parser.nit:28124 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(63);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28128 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction693___init(val_t p0, int* init_table){
-  int itpos697 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction693].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos697]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28130;
-  fra.me.meth = LOCATE_parser___ReduceAction693___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28130 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos697] = 1;
-  return;
-}
-void parser___ReduceAction694___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28134;
-  fra.me.meth = LOCATE_parser___ReduceAction694___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28140);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28142 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(63);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28145 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction694___init(val_t p0, int* init_table){
-  int itpos698 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction694].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos698]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28147;
-  fra.me.meth = LOCATE_parser___ReduceAction694___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28147 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos698] = 1;
-  return;
-}
-void parser___ReduceAction695___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 = 28151;
-  fra.me.meth = LOCATE_parser___ReduceAction695___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(63);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28159 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction695___init(val_t p0, int* init_table){
-  int itpos699 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction695].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos699]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28161;
-  fra.me.meth = LOCATE_parser___ReduceAction695___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28161 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos699] = 1;
-  return;
-}
-void parser___ReduceAction696___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 = 28165;
-  fra.me.meth = LOCATE_parser___ReduceAction696___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(63);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28170 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction696___init(val_t p0, int* init_table){
-  int itpos700 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction696].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos700]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28172;
-  fra.me.meth = LOCATE_parser___ReduceAction696___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28172 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos700] = 1;
-  return;
-}
-void parser___ReduceAction697___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28176;
-  fra.me.meth = LOCATE_parser___ReduceAction697___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28186 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28186);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28188 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(64);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28191 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction697___init(val_t p0, int* init_table){
-  int itpos701 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction697].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos701]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28193;
-  fra.me.meth = LOCATE_parser___ReduceAction697___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28193 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos701] = 1;
-  return;
-}
-void parser___ReduceAction698___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 = 28197;
-  fra.me.meth = LOCATE_parser___ReduceAction698___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:28208 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28208);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28210);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:28211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28212 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:28215 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:28216 */
-  } else {
-    /* ./parser//parser.nit:28218 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(64);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28222 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction698___init(val_t p0, int* init_table){
-  int itpos702 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction698].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos702]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28224;
-  fra.me.meth = LOCATE_parser___ReduceAction698___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28224 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos702] = 1;
-  return;
-}
-void parser___ReduceAction699___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 = 28228;
-  fra.me.meth = LOCATE_parser___ReduceAction699___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28236);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(65);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28238 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction699___init(val_t p0, int* init_table){
-  int itpos703 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction699].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos703]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28240;
-  fra.me.meth = LOCATE_parser___ReduceAction699___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28240 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos703] = 1;
-  return;
-}
-void parser___ReduceAction700___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 = 28244;
-  fra.me.meth = LOCATE_parser___ReduceAction700___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28252 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28252);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:28254 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:28255 */
-  } else {
-    /* ./parser//parser.nit:28257 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(66);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28261 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction700___init(val_t p0, int* init_table){
-  int itpos704 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction700].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos704]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28263;
-  fra.me.meth = LOCATE_parser___ReduceAction700___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28263 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos704] = 1;
-  return;
-}
-void parser___ReduceAction701___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 = 28267;
-  fra.me.meth = LOCATE_parser___ReduceAction701___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28273 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28273);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:28275 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:28276 */
-  } else {
-    /* ./parser//parser.nit:28278 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(66);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28282 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction701___init(val_t p0, int* init_table){
-  int itpos705 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction701].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos705]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28284;
-  fra.me.meth = LOCATE_parser___ReduceAction701___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28284 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos705] = 1;
-  return;
-}
-void parser___ReduceAction702___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28288;
-  fra.me.meth = LOCATE_parser___ReduceAction702___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:28294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28294);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28296 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(67);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28299 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction702___init(val_t p0, int* init_table){
-  int itpos706 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction702].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos706]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28301;
-  fra.me.meth = LOCATE_parser___ReduceAction702___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28301 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos706] = 1;
-  return;
-}
-void parser___ReduceAction703___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 = 28305;
-  fra.me.meth = LOCATE_parser___ReduceAction703___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:28315 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28315);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:28317 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28317);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:28319 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:28320 */
-  } else {
-    /* ./parser//parser.nit:28322 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:28325 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:28326 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(67);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28329 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction703___init(val_t p0, int* init_table){
-  int itpos707 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction703].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos707]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28331;
-  fra.me.meth = LOCATE_parser___ReduceAction703___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28331 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos707] = 1;
-  return;
-}
-void parser___ReduceAction704___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 = 28335;
-  fra.me.meth = LOCATE_parser___ReduceAction704___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:28341 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28341);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(68);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28347 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction704___init(val_t p0, int* init_table){
-  int itpos708 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction704].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos708]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28349;
-  fra.me.meth = LOCATE_parser___ReduceAction704___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28349 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos708] = 1;
-  return;
-}
-void parser___ReduceAction705___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 = 28353;
-  fra.me.meth = LOCATE_parser___ReduceAction705___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:28360 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28360);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:28362 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:28363 */
-  } else {
-    /* ./parser//parser.nit:28365 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:28369 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28369);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(68);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28375 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction705___init(val_t p0, int* init_table){
-  int itpos709 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction705].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos709]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28377;
-  fra.me.meth = LOCATE_parser___ReduceAction705___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28377 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos709] = 1;
-  return;
-}
-void parser___ReduceAction706___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 = 28381;
-  fra.me.meth = LOCATE_parser___ReduceAction706___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28387 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28387);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:28389 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:28390 */
-  } else {
-    /* ./parser//parser.nit:28392 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(68);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28400 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction706___init(val_t p0, int* init_table){
-  int itpos710 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction706].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos710]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28402;
-  fra.me.meth = LOCATE_parser___ReduceAction706___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28402 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos710] = 1;
-  return;
-}
-void parser___ReduceAction707___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 = 28406;
-  fra.me.meth = LOCATE_parser___ReduceAction707___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:28413 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28413);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(69);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28415 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction707___init(val_t p0, int* init_table){
-  int itpos711 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction707].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos711]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28417;
-  fra.me.meth = LOCATE_parser___ReduceAction707___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28417 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos711] = 1;
-  return;
-}
-void parser___ReduceAction708___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 = 28421;
-  fra.me.meth = LOCATE_parser___ReduceAction708___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:28428 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28428);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(70);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28430 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction708___init(val_t p0, int* init_table){
-  int itpos712 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction708].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos712]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28432;
-  fra.me.meth = LOCATE_parser___ReduceAction708___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28432 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos712] = 1;
-  return;
-}
-void parser___ReduceAction709___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 = 28436;
-  fra.me.meth = LOCATE_parser___ReduceAction709___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(71);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28440 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction709___init(val_t p0, int* init_table){
-  int itpos713 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction709].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos713]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28442;
-  fra.me.meth = LOCATE_parser___ReduceAction709___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28442 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos713] = 1;
-  return;
-}
-void parser___ReduceAction710___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 = 28446;
-  fra.me.meth = LOCATE_parser___ReduceAction710___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(71);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28450 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction710___init(val_t p0, int* init_table){
-  int itpos714 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction710].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos714]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28452;
-  fra.me.meth = LOCATE_parser___ReduceAction710___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28452 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos714] = 1;
-  return;
-}
-void parser___ReduceAction711___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 = 28456;
-  fra.me.meth = LOCATE_parser___ReduceAction711___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28462);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:28464 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:28465 */
-  } else {
-    /* ./parser//parser.nit:28467 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(72);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28474 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction711___init(val_t p0, int* init_table){
-  int itpos715 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction711].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos715]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28476;
-  fra.me.meth = LOCATE_parser___ReduceAction711___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28476 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos715] = 1;
-  return;
-}
-void parser___ReduceAction712___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 = 28480;
-  fra.me.meth = LOCATE_parser___ReduceAction712___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:28487 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28487);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:28489 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:28490 */
-  } else {
-    /* ./parser//parser.nit:28492 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[3] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(72);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28499 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction712___init(val_t p0, int* init_table){
-  int itpos716 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction712].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos716]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28501;
-  fra.me.meth = LOCATE_parser___ReduceAction712___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28501 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos716] = 1;
-  return;
-}
-void parser___ReduceAction713___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 = 28505;
-  fra.me.meth = LOCATE_parser___ReduceAction713___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[0] = NIT_NULL;
-  REGB0 = TAG_Int(72);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28510 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction713___init(val_t p0, int* init_table){
-  int itpos717 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction713].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos717]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28512;
-  fra.me.meth = LOCATE_parser___ReduceAction713___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28512 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos717] = 1;
-  return;
-}
-void parser___ReduceAction714___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28516;
-  fra.me.meth = LOCATE_parser___ReduceAction714___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;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = NIT_NULL;
-  REGB0 = TAG_Int(73);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28520 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction714___init(val_t p0, int* init_table){
-  int itpos718 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction714].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos718]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28522;
-  fra.me.meth = LOCATE_parser___ReduceAction714___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28522 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos718] = 1;
-  return;
-}
-void parser___ReduceAction715___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 = 28526;
-  fra.me.meth = LOCATE_parser___ReduceAction715___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
-  /* ./parser//parser.nit:28531 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28531);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(73);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28533 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction715___init(val_t p0, int* init_table){
-  int itpos719 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction715].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos719]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28535;
-  fra.me.meth = LOCATE_parser___ReduceAction715___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28535 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos719] = 1;
-  return;
-}
-void parser___ReduceAction716___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 = 28539;
-  fra.me.meth = LOCATE_parser___ReduceAction716___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(74);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28544 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction716___init(val_t p0, int* init_table){
-  int itpos720 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction716].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos720]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28546;
-  fra.me.meth = LOCATE_parser___ReduceAction716___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28546 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos720] = 1;
-  return;
-}
-void parser___ReduceAction717___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 = 28550;
-  fra.me.meth = LOCATE_parser___ReduceAction717___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(74);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28556 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction717___init(val_t p0, int* init_table){
-  int itpos721 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction717].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos721]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28558;
-  fra.me.meth = LOCATE_parser___ReduceAction717___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28558 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos721] = 1;
-  return;
-}
-void parser___ReduceAction718___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 = 28562;
-  fra.me.meth = LOCATE_parser___ReduceAction718___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(74);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28566 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction718___init(val_t p0, int* init_table){
-  int itpos722 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction718].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos722]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28568;
-  fra.me.meth = LOCATE_parser___ReduceAction718___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28568 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos722] = 1;
-  return;
-}
-void parser___ReduceAction719___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 = 28572;
-  fra.me.meth = LOCATE_parser___ReduceAction719___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:28578 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28578);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(75);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28580 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction719___init(val_t p0, int* init_table){
-  int itpos723 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction719].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos723]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28582;
-  fra.me.meth = LOCATE_parser___ReduceAction719___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28582 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos723] = 1;
-  return;
-}
-void parser___ReduceAction720___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 = 28586;
-  fra.me.meth = LOCATE_parser___ReduceAction720___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28597);
-    nit_exit(1);
-  }
-  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:28599 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28599);
-    nit_exit(1);
-  }
-  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:28601 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28601);
-    nit_exit(1);
-  }
-  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:28603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28603);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:28608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28608);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28610);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28621 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction720___init(val_t p0, int* init_table){
-  int itpos724 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction720].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos724]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28623;
-  fra.me.meth = LOCATE_parser___ReduceAction720___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28623 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos724] = 1;
-  return;
-}
-void parser___ReduceAction721___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 = 28627;
-  fra.me.meth = LOCATE_parser___ReduceAction721___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28638);
-    nit_exit(1);
-  }
-  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:28640 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28640);
-    nit_exit(1);
-  }
-  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:28642 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28642);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:28644 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28644);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:28649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28649);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28651 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28651);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28662 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction721___init(val_t p0, int* init_table){
-  int itpos725 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction721].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos725]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28664;
-  fra.me.meth = LOCATE_parser___ReduceAction721___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28664 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos725] = 1;
-  return;
-}
-void parser___ReduceAction722___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 = 28668;
-  fra.me.meth = LOCATE_parser___ReduceAction722___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28679);
-    nit_exit(1);
-  }
-  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:28681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28681);
-    nit_exit(1);
-  }
-  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:28683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28683);
-    nit_exit(1);
-  }
-  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:28685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28685);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:28690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28690);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28692);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28703 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction722___init(val_t p0, int* init_table){
-  int itpos726 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction722].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos726]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28705;
-  fra.me.meth = LOCATE_parser___ReduceAction722___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28705 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos726] = 1;
-  return;
-}
-void parser___ReduceAction723___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 = 28709;
-  fra.me.meth = LOCATE_parser___ReduceAction723___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28720);
-    nit_exit(1);
-  }
-  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:28722 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28722);
-    nit_exit(1);
-  }
-  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:28724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28724);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:28726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28726);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:28731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28731);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28733 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28733);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28744 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction723___init(val_t p0, int* init_table){
-  int itpos727 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction723].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos727]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28746;
-  fra.me.meth = LOCATE_parser___ReduceAction723___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28746 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos727] = 1;
-  return;
-}
-void parser___ReduceAction724___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 = 28750;
-  fra.me.meth = LOCATE_parser___ReduceAction724___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28761 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28761);
-    nit_exit(1);
-  }
-  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:28763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28763);
-    nit_exit(1);
-  }
-  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:28765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28765);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:28767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28767);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:28772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28772);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28774 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28774);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28785 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction724___init(val_t p0, int* init_table){
-  int itpos728 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction724].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos728]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28787;
-  fra.me.meth = LOCATE_parser___ReduceAction724___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28787 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos728] = 1;
-  return;
-}
-void parser___ReduceAction725___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 = 28791;
-  fra.me.meth = LOCATE_parser___ReduceAction725___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28802 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28802);
-    nit_exit(1);
-  }
-  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:28804 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28804);
-    nit_exit(1);
-  }
-  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:28806 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28806);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:28808 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28808);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:28813 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28813);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28815);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28826 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction725___init(val_t p0, int* init_table){
-  int itpos729 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction725].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos729]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28828;
-  fra.me.meth = LOCATE_parser___ReduceAction725___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28828 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos729] = 1;
-  return;
-}
-void parser___ReduceAction726___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 = 28832;
-  fra.me.meth = LOCATE_parser___ReduceAction726___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28843 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28843);
-    nit_exit(1);
-  }
-  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:28845 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28845);
-    nit_exit(1);
-  }
-  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:28847 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28847);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:28849 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28849);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:28854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28854);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28856 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28856);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28867 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction726___init(val_t p0, int* init_table){
-  int itpos730 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction726].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos730]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28869;
-  fra.me.meth = LOCATE_parser___ReduceAction726___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28869 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos730] = 1;
-  return;
-}
-void parser___ReduceAction727___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 = 28873;
-  fra.me.meth = LOCATE_parser___ReduceAction727___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28884 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28884);
-    nit_exit(1);
-  }
-  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:28886 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28886);
-    nit_exit(1);
-  }
-  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:28888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28888);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:28890 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28890);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:28895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28895);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28897);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28908 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction727___init(val_t p0, int* init_table){
-  int itpos731 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction727].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos731]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28910;
-  fra.me.meth = LOCATE_parser___ReduceAction727___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28910 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos731] = 1;
-  return;
-}
-void parser___ReduceAction728___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 = 28914;
-  fra.me.meth = LOCATE_parser___ReduceAction728___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28925);
-    nit_exit(1);
-  }
-  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:28927 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28927);
-    nit_exit(1);
-  }
-  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:28929 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28929);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:28931 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28931);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:28936 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28936);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28938 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28938);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28949 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction728___init(val_t p0, int* init_table){
-  int itpos732 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction728].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos732]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28951;
-  fra.me.meth = LOCATE_parser___ReduceAction728___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28951 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos732] = 1;
-  return;
-}
-void parser___ReduceAction729___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 = 28955;
-  fra.me.meth = LOCATE_parser___ReduceAction729___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:28966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28966);
-    nit_exit(1);
-  }
-  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:28968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28968);
-    nit_exit(1);
-  }
-  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:28970 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28970);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:28972 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28972);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:28977 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28977);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:28979 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 28979);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:28990 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction729___init(val_t p0, int* init_table){
-  int itpos733 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction729].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos733]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 28992;
-  fra.me.meth = LOCATE_parser___ReduceAction729___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:28992 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos733] = 1;
-  return;
-}
-void parser___ReduceAction730___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 = 28996;
-  fra.me.meth = LOCATE_parser___ReduceAction730___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29007);
-    nit_exit(1);
-  }
-  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:29009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29009);
-    nit_exit(1);
-  }
-  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:29011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29011);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:29013 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29013);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:29018 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29018);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29020 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29020);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29031 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction730___init(val_t p0, int* init_table){
-  int itpos734 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction730].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos734]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29033;
-  fra.me.meth = LOCATE_parser___ReduceAction730___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29033 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos734] = 1;
-  return;
-}
-void parser___ReduceAction731___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 = 29037;
-  fra.me.meth = LOCATE_parser___ReduceAction731___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29048 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29048);
-    nit_exit(1);
-  }
-  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:29050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29050);
-    nit_exit(1);
-  }
-  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:29052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29052);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:29054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29054);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:29059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29059);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29061);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29072 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction731___init(val_t p0, int* init_table){
-  int itpos735 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction731].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos735]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29074;
-  fra.me.meth = LOCATE_parser___ReduceAction731___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29074 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos735] = 1;
-  return;
-}
-void parser___ReduceAction732___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 = 29078;
-  fra.me.meth = LOCATE_parser___ReduceAction732___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29090 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29090);
-    nit_exit(1);
-  }
-  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:29092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29092);
-    nit_exit(1);
-  }
-  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:29094 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29094);
-    nit_exit(1);
-  }
-  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:29096 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29096);
-    nit_exit(1);
-  }
-  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:29098 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29098);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:29104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29104);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29106 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29106);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29117 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction732___init(val_t p0, int* init_table){
-  int itpos736 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction732].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos736]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29119;
-  fra.me.meth = LOCATE_parser___ReduceAction732___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29119 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos736] = 1;
-  return;
-}
-void parser___ReduceAction733___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 = 29123;
-  fra.me.meth = LOCATE_parser___ReduceAction733___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29134 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29134);
-    nit_exit(1);
-  }
-  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:29136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29136);
-    nit_exit(1);
-  }
-  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:29138 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29138);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:29140 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29140);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:29145 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29145);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29147 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29147);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29158 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction733___init(val_t p0, int* init_table){
-  int itpos737 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction733].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos737]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29160;
-  fra.me.meth = LOCATE_parser___ReduceAction733___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29160 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos737] = 1;
-  return;
-}
-void parser___ReduceAction734___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 = 29164;
-  fra.me.meth = LOCATE_parser___ReduceAction734___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29176 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29176);
-    nit_exit(1);
-  }
-  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:29178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29178);
-    nit_exit(1);
-  }
-  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:29180 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29180);
-    nit_exit(1);
-  }
-  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:29182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29182);
-    nit_exit(1);
-  }
-  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:29184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29184);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:29190 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29190);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29192 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29192);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29203 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction734___init(val_t p0, int* init_table){
-  int itpos738 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction734].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos738]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29205;
-  fra.me.meth = LOCATE_parser___ReduceAction734___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29205 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos738] = 1;
-  return;
-}
-void parser___ReduceAction735___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 = 29209;
-  fra.me.meth = LOCATE_parser___ReduceAction735___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29222 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29222);
-    nit_exit(1);
-  }
-  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:29224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29224);
-    nit_exit(1);
-  }
-  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:29226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29226);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:29228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29228);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:29230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29230);
-    nit_exit(1);
-  }
-  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:29232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29232);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:29239 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29239);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29241 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29241);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29252 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction735___init(val_t p0, int* init_table){
-  int itpos739 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction735].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos739]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29254;
-  fra.me.meth = LOCATE_parser___ReduceAction735___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29254 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos739] = 1;
-  return;
-}
-void parser___ReduceAction736___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 = 29258;
-  fra.me.meth = LOCATE_parser___ReduceAction736___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29270 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29270);
-    nit_exit(1);
-  }
-  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:29272 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29272);
-    nit_exit(1);
-  }
-  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:29274 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29274);
-    nit_exit(1);
-  }
-  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:29276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29276);
-    nit_exit(1);
-  }
-  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:29278 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29278);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:29283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29283);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29285 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29285);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29296 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction736___init(val_t p0, int* init_table){
-  int itpos740 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction736].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos740]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29298;
-  fra.me.meth = LOCATE_parser___ReduceAction736___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29298 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos740] = 1;
-  return;
-}
-void parser___ReduceAction737___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 = 29302;
-  fra.me.meth = LOCATE_parser___ReduceAction737___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29314);
-    nit_exit(1);
-  }
-  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:29316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29316);
-    nit_exit(1);
-  }
-  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:29318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29318);
-    nit_exit(1);
-  }
-  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:29320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29320);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:29322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29322);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:29327 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29327);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29329 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29329);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29340 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction737___init(val_t p0, int* init_table){
-  int itpos741 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction737].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos741]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29342;
-  fra.me.meth = LOCATE_parser___ReduceAction737___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29342 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos741] = 1;
-  return;
-}
-void parser___ReduceAction738___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 = 29346;
-  fra.me.meth = LOCATE_parser___ReduceAction738___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29358 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29358);
-    nit_exit(1);
-  }
-  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:29360 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29360);
-    nit_exit(1);
-  }
-  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:29362 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29362);
-    nit_exit(1);
-  }
-  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:29364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29364);
-    nit_exit(1);
-  }
-  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:29366 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29366);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:29371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29371);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29373);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29384 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction738___init(val_t p0, int* init_table){
-  int itpos742 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction738].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos742]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29386;
-  fra.me.meth = LOCATE_parser___ReduceAction738___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29386 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos742] = 1;
-  return;
-}
-void parser___ReduceAction739___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 = 29390;
-  fra.me.meth = LOCATE_parser___ReduceAction739___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29402 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29402);
-    nit_exit(1);
-  }
-  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:29404 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29404);
-    nit_exit(1);
-  }
-  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:29406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29406);
-    nit_exit(1);
-  }
-  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:29408 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29408);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:29410 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29410);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:29415 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29415);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29417 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29417);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29428 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction739___init(val_t p0, int* init_table){
-  int itpos743 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction739].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos743]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29430;
-  fra.me.meth = LOCATE_parser___ReduceAction739___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29430 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos743] = 1;
-  return;
-}
-void parser___ReduceAction740___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 = 29434;
-  fra.me.meth = LOCATE_parser___ReduceAction740___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29446 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29446);
-    nit_exit(1);
-  }
-  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:29448 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29448);
-    nit_exit(1);
-  }
-  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:29450 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29450);
-    nit_exit(1);
-  }
-  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:29452 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29452);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:29454 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29454);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:29459 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29459);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29461);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29472 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction740___init(val_t p0, int* init_table){
-  int itpos744 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction740].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos744]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29474;
-  fra.me.meth = LOCATE_parser___ReduceAction740___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29474 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos744] = 1;
-  return;
-}
-void parser___ReduceAction741___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 = 29478;
-  fra.me.meth = LOCATE_parser___ReduceAction741___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29490 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29490);
-    nit_exit(1);
-  }
-  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:29492 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29492);
-    nit_exit(1);
-  }
-  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:29494 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29494);
-    nit_exit(1);
-  }
-  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:29496 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29496);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:29498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29498);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:29503 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29503);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29505 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29505);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29516 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction741___init(val_t p0, int* init_table){
-  int itpos745 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction741].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos745]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29518;
-  fra.me.meth = LOCATE_parser___ReduceAction741___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29518 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos745] = 1;
-  return;
-}
-void parser___ReduceAction742___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 = 29522;
-  fra.me.meth = LOCATE_parser___ReduceAction742___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29534 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29534);
-    nit_exit(1);
-  }
-  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:29536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29536);
-    nit_exit(1);
-  }
-  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:29538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29538);
-    nit_exit(1);
-  }
-  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:29540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29540);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:29542 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29542);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:29547 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29547);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29549 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29549);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29560 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction742___init(val_t p0, int* init_table){
-  int itpos746 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction742].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos746]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29562;
-  fra.me.meth = LOCATE_parser___ReduceAction742___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29562 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos746] = 1;
-  return;
-}
-void parser___ReduceAction743___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 = 29566;
-  fra.me.meth = LOCATE_parser___ReduceAction743___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29578 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29578);
-    nit_exit(1);
-  }
-  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:29580 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29580);
-    nit_exit(1);
-  }
-  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:29582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29582);
-    nit_exit(1);
-  }
-  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:29584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29584);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:29586 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29586);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:29591 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29591);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29593 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29593);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29604 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction743___init(val_t p0, int* init_table){
-  int itpos747 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction743].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos747]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29606;
-  fra.me.meth = LOCATE_parser___ReduceAction743___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29606 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos747] = 1;
-  return;
-}
-void parser___ReduceAction744___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 = 29610;
-  fra.me.meth = LOCATE_parser___ReduceAction744___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29622);
-    nit_exit(1);
-  }
-  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:29624 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29624);
-    nit_exit(1);
-  }
-  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:29626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29626);
-    nit_exit(1);
-  }
-  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:29628 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29628);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:29630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29630);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:29635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29635);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29637 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29637);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29648 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction744___init(val_t p0, int* init_table){
-  int itpos748 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction744].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos748]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29650;
-  fra.me.meth = LOCATE_parser___ReduceAction744___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29650 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos748] = 1;
-  return;
-}
-void parser___ReduceAction745___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 = 29654;
-  fra.me.meth = LOCATE_parser___ReduceAction745___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29666);
-    nit_exit(1);
-  }
-  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:29668 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29668);
-    nit_exit(1);
-  }
-  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:29670 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29670);
-    nit_exit(1);
-  }
-  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:29672 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29672);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:29674 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29674);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:29679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29679);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29681);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29692 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction745___init(val_t p0, int* init_table){
-  int itpos749 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction745].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos749]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29694;
-  fra.me.meth = LOCATE_parser___ReduceAction745___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29694 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos749] = 1;
-  return;
-}
-void parser___ReduceAction746___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 = 29698;
-  fra.me.meth = LOCATE_parser___ReduceAction746___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29710);
-    nit_exit(1);
-  }
-  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:29712 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29712);
-    nit_exit(1);
-  }
-  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:29714 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29714);
-    nit_exit(1);
-  }
-  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:29716 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29716);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:29718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29718);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:29723 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29723);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29725 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29725);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29736 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction746___init(val_t p0, int* init_table){
-  int itpos750 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction746].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos750]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29738;
-  fra.me.meth = LOCATE_parser___ReduceAction746___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29738 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos750] = 1;
-  return;
-}
-void parser___ReduceAction747___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 = 29742;
-  fra.me.meth = LOCATE_parser___ReduceAction747___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29754);
-    nit_exit(1);
-  }
-  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:29756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29756);
-    nit_exit(1);
-  }
-  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:29758 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29758);
-    nit_exit(1);
-  }
-  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:29760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29760);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:29762 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29762);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:29767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29767);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29769);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29780 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction747___init(val_t p0, int* init_table){
-  int itpos751 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction747].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos751]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29782;
-  fra.me.meth = LOCATE_parser___ReduceAction747___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29782 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos751] = 1;
-  return;
-}
-void parser___ReduceAction748___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 = 29786;
-  fra.me.meth = LOCATE_parser___ReduceAction748___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29799 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29799);
-    nit_exit(1);
-  }
-  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:29801 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29801);
-    nit_exit(1);
-  }
-  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:29803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29803);
-    nit_exit(1);
-  }
-  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:29805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29805);
-    nit_exit(1);
-  }
-  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:29807 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29807);
-    nit_exit(1);
-  }
-  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:29809 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29809);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:29815 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29815);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29817 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29817);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29828 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction748___init(val_t p0, int* init_table){
-  int itpos752 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction748].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos752]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29830;
-  fra.me.meth = LOCATE_parser___ReduceAction748___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29830 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos752] = 1;
-  return;
-}
-void parser___ReduceAction749___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 = 29834;
-  fra.me.meth = LOCATE_parser___ReduceAction749___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29846);
-    nit_exit(1);
-  }
-  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:29848 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29848);
-    nit_exit(1);
-  }
-  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:29850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29850);
-    nit_exit(1);
-  }
-  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:29852 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29852);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:29854 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29854);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:29859 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29859);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29861 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29861);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29872 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction749___init(val_t p0, int* init_table){
-  int itpos753 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction749].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos753]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29874;
-  fra.me.meth = LOCATE_parser___ReduceAction749___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29874 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos753] = 1;
-  return;
-}
-void parser___ReduceAction750___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 = 29878;
-  fra.me.meth = LOCATE_parser___ReduceAction750___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29891 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29891);
-    nit_exit(1);
-  }
-  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:29893 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29893);
-    nit_exit(1);
-  }
-  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:29895 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29895);
-    nit_exit(1);
-  }
-  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:29897 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29897);
-    nit_exit(1);
-  }
-  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:29899 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29899);
-    nit_exit(1);
-  }
-  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:29901 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29901);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:29907 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29907);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29909 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29909);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29920 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction750___init(val_t p0, int* init_table){
-  int itpos754 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction750].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos754]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29922;
-  fra.me.meth = LOCATE_parser___ReduceAction750___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29922 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos754] = 1;
-  return;
-}
-void parser___ReduceAction751___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 = 29926;
-  fra.me.meth = LOCATE_parser___ReduceAction751___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29940);
-    nit_exit(1);
-  }
-  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:29942 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29942);
-    nit_exit(1);
-  }
-  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:29944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29944);
-    nit_exit(1);
-  }
-  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:29946 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29946);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:29948 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29948);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:29950 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29950);
-    nit_exit(1);
-  }
-  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:29952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29952);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:29959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29959);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:29961 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29961);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:29972 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction751___init(val_t p0, int* init_table){
-  int itpos755 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction751].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos755]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 29974;
-  fra.me.meth = LOCATE_parser___ReduceAction751___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:29974 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos755] = 1;
-  return;
-}
-void parser___ReduceAction752___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 = 29978;
-  fra.me.meth = LOCATE_parser___ReduceAction752___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:29990 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29990);
-    nit_exit(1);
-  }
-  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:29992 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29992);
-    nit_exit(1);
-  }
-  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:29994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29994);
-    nit_exit(1);
-  }
-  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:29996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 29996);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:30001 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30001);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30003);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30014 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction752___init(val_t p0, int* init_table){
-  int itpos756 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction752].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos756]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30016;
-  fra.me.meth = LOCATE_parser___ReduceAction752___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30016 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos756] = 1;
-  return;
-}
-void parser___ReduceAction753___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 = 30020;
-  fra.me.meth = LOCATE_parser___ReduceAction753___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30032 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30032);
-    nit_exit(1);
-  }
-  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:30034 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30034);
-    nit_exit(1);
-  }
-  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:30036 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30036);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:30038 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30038);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:30043 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30043);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30045);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30056 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction753___init(val_t p0, int* init_table){
-  int itpos757 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction753].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos757]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30058;
-  fra.me.meth = LOCATE_parser___ReduceAction753___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30058 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos757] = 1;
-  return;
-}
-void parser___ReduceAction754___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 = 30062;
-  fra.me.meth = LOCATE_parser___ReduceAction754___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30074);
-    nit_exit(1);
-  }
-  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:30076 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30076);
-    nit_exit(1);
-  }
-  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:30078 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30078);
-    nit_exit(1);
-  }
-  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:30080 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30080);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:30085 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30085);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30087 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30087);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30098 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction754___init(val_t p0, int* init_table){
-  int itpos758 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction754].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos758]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30100;
-  fra.me.meth = LOCATE_parser___ReduceAction754___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30100 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos758] = 1;
-  return;
-}
-void parser___ReduceAction755___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 = 30104;
-  fra.me.meth = LOCATE_parser___ReduceAction755___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30116 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30116);
-    nit_exit(1);
-  }
-  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:30118 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30118);
-    nit_exit(1);
-  }
-  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:30120 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30120);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:30122 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30122);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:30127 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30127);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30129);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30140 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction755___init(val_t p0, int* init_table){
-  int itpos759 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction755].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos759]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30142;
-  fra.me.meth = LOCATE_parser___ReduceAction755___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30142 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos759] = 1;
-  return;
-}
-void parser___ReduceAction756___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 = 30146;
-  fra.me.meth = LOCATE_parser___ReduceAction756___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30158 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30158);
-    nit_exit(1);
-  }
-  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:30160 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30160);
-    nit_exit(1);
-  }
-  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:30162 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30162);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:30164 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30164);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:30169 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30169);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30171 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30171);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30182 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction756___init(val_t p0, int* init_table){
-  int itpos760 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction756].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos760]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30184;
-  fra.me.meth = LOCATE_parser___ReduceAction756___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30184 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos760] = 1;
-  return;
-}
-void parser___ReduceAction757___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 = 30188;
-  fra.me.meth = LOCATE_parser___ReduceAction757___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30200);
-    nit_exit(1);
-  }
-  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:30202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30202);
-    nit_exit(1);
-  }
-  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:30204 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30204);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:30206 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30206);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:30211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30211);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30213 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30213);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30224 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction757___init(val_t p0, int* init_table){
-  int itpos761 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction757].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos761]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30226;
-  fra.me.meth = LOCATE_parser___ReduceAction757___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30226 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos761] = 1;
-  return;
-}
-void parser___ReduceAction758___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 = 30230;
-  fra.me.meth = LOCATE_parser___ReduceAction758___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30242 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30242);
-    nit_exit(1);
-  }
-  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:30244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30244);
-    nit_exit(1);
-  }
-  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:30246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30246);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:30248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30248);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:30253 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30253);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30255 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30255);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30266 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction758___init(val_t p0, int* init_table){
-  int itpos762 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction758].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos762]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30268;
-  fra.me.meth = LOCATE_parser___ReduceAction758___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30268 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos762] = 1;
-  return;
-}
-void parser___ReduceAction759___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 = 30272;
-  fra.me.meth = LOCATE_parser___ReduceAction759___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30284 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30284);
-    nit_exit(1);
-  }
-  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:30286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30286);
-    nit_exit(1);
-  }
-  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:30288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30288);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:30290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30290);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:30295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30295);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30297 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30297);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30308 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction759___init(val_t p0, int* init_table){
-  int itpos763 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction759].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos763]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30310;
-  fra.me.meth = LOCATE_parser___ReduceAction759___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30310 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos763] = 1;
-  return;
-}
-void parser___ReduceAction760___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 = 30314;
-  fra.me.meth = LOCATE_parser___ReduceAction760___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30326);
-    nit_exit(1);
-  }
-  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:30328 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30328);
-    nit_exit(1);
-  }
-  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:30330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30330);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:30332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30332);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:30337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30337);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30339);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30350 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction760___init(val_t p0, int* init_table){
-  int itpos764 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction760].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos764]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30352;
-  fra.me.meth = LOCATE_parser___ReduceAction760___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30352 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos764] = 1;
-  return;
-}
-void parser___ReduceAction761___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 = 30356;
-  fra.me.meth = LOCATE_parser___ReduceAction761___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30368);
-    nit_exit(1);
-  }
-  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:30370 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30370);
-    nit_exit(1);
-  }
-  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:30372 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30372);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:30374 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30374);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:30379 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30379);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30381 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30381);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30392 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction761___init(val_t p0, int* init_table){
-  int itpos765 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction761].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos765]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30394;
-  fra.me.meth = LOCATE_parser___ReduceAction761___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30394 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos765] = 1;
-  return;
-}
-void parser___ReduceAction762___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 = 30398;
-  fra.me.meth = LOCATE_parser___ReduceAction762___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30410 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30410);
-    nit_exit(1);
-  }
-  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:30412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30412);
-    nit_exit(1);
-  }
-  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:30414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30414);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:30416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30416);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:30421 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30421);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30423);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30434 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction762___init(val_t p0, int* init_table){
-  int itpos766 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction762].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos766]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30436;
-  fra.me.meth = LOCATE_parser___ReduceAction762___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30436 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos766] = 1;
-  return;
-}
-void parser___ReduceAction763___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 = 30440;
-  fra.me.meth = LOCATE_parser___ReduceAction763___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30452 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30452);
-    nit_exit(1);
-  }
-  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:30454 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30454);
-    nit_exit(1);
-  }
-  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:30456 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30456);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:30458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30458);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:30463 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30463);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30465 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30465);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30476 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction763___init(val_t p0, int* init_table){
-  int itpos767 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction763].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos767]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30478;
-  fra.me.meth = LOCATE_parser___ReduceAction763___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30478 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos767] = 1;
-  return;
-}
-void parser___ReduceAction764___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 = 30482;
-  fra.me.meth = LOCATE_parser___ReduceAction764___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30495 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30495);
-    nit_exit(1);
-  }
-  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:30497 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30497);
-    nit_exit(1);
-  }
-  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:30499 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30499);
-    nit_exit(1);
-  }
-  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:30501 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30501);
-    nit_exit(1);
-  }
-  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:30503 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30503);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:30509 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30509);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30511);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30522 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction764___init(val_t p0, int* init_table){
-  int itpos768 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction764].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos768]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30524;
-  fra.me.meth = LOCATE_parser___ReduceAction764___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30524 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos768] = 1;
-  return;
-}
-void parser___ReduceAction765___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 = 30528;
-  fra.me.meth = LOCATE_parser___ReduceAction765___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30540);
-    nit_exit(1);
-  }
-  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:30542 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30542);
-    nit_exit(1);
-  }
-  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:30544 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30544);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:30546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30546);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:30551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30551);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30553);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30564 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction765___init(val_t p0, int* init_table){
-  int itpos769 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction765].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos769]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30566;
-  fra.me.meth = LOCATE_parser___ReduceAction765___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30566 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos769] = 1;
-  return;
-}
-void parser___ReduceAction766___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 = 30570;
-  fra.me.meth = LOCATE_parser___ReduceAction766___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30583 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30583);
-    nit_exit(1);
-  }
-  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:30585 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30585);
-    nit_exit(1);
-  }
-  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:30587 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30587);
-    nit_exit(1);
-  }
-  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:30589 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30589);
-    nit_exit(1);
-  }
-  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:30591 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30591);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:30597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30597);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30599 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30599);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30610 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction766___init(val_t p0, int* init_table){
-  int itpos770 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction766].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos770]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30612;
-  fra.me.meth = LOCATE_parser___ReduceAction766___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30612 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos770] = 1;
-  return;
-}
-void parser___ReduceAction767___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 = 30616;
-  fra.me.meth = LOCATE_parser___ReduceAction767___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30630);
-    nit_exit(1);
-  }
-  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:30632 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30632);
-    nit_exit(1);
-  }
-  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:30634 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30634);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:30636 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30636);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:30638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30638);
-    nit_exit(1);
-  }
-  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:30640 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30640);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:30647 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30647);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30649 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30649);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30660 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction767___init(val_t p0, int* init_table){
-  int itpos771 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction767].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos771]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30662;
-  fra.me.meth = LOCATE_parser___ReduceAction767___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30662 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos771] = 1;
-  return;
-}
-void parser___ReduceAction768___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 = 30666;
-  fra.me.meth = LOCATE_parser___ReduceAction768___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30679);
-    nit_exit(1);
-  }
-  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:30681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30681);
-    nit_exit(1);
-  }
-  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:30683 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30683);
-    nit_exit(1);
-  }
-  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:30685 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30685);
-    nit_exit(1);
-  }
-  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:30687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30687);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:30692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30692);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30694 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30694);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30705 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction768___init(val_t p0, int* init_table){
-  int itpos772 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction768].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos772]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30707;
-  fra.me.meth = LOCATE_parser___ReduceAction768___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30707 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos772] = 1;
-  return;
-}
-void parser___ReduceAction769___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 = 30711;
-  fra.me.meth = LOCATE_parser___ReduceAction769___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30724 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30724);
-    nit_exit(1);
-  }
-  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:30726 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30726);
-    nit_exit(1);
-  }
-  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:30728 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30728);
-    nit_exit(1);
-  }
-  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:30730 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30730);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:30732 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30732);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:30737 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30737);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30739 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30739);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30750 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction769___init(val_t p0, int* init_table){
-  int itpos773 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction769].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos773]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30752;
-  fra.me.meth = LOCATE_parser___ReduceAction769___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30752 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos773] = 1;
-  return;
-}
-void parser___ReduceAction770___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 = 30756;
-  fra.me.meth = LOCATE_parser___ReduceAction770___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30769 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30769);
-    nit_exit(1);
-  }
-  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:30771 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30771);
-    nit_exit(1);
-  }
-  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:30773 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30773);
-    nit_exit(1);
-  }
-  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:30775 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30775);
-    nit_exit(1);
-  }
-  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:30777 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30777);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:30782 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30782);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30784 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30784);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30795 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction770___init(val_t p0, int* init_table){
-  int itpos774 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction770].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos774]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30797;
-  fra.me.meth = LOCATE_parser___ReduceAction770___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30797 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos774] = 1;
-  return;
-}
-void parser___ReduceAction771___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 = 30801;
-  fra.me.meth = LOCATE_parser___ReduceAction771___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30814);
-    nit_exit(1);
-  }
-  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:30816 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30816);
-    nit_exit(1);
-  }
-  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:30818 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30818);
-    nit_exit(1);
-  }
-  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:30820 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30820);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:30822 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30822);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:30827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30827);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30829 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30829);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30840 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction771___init(val_t p0, int* init_table){
-  int itpos775 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction771].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos775]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30842;
-  fra.me.meth = LOCATE_parser___ReduceAction771___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30842 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos775] = 1;
-  return;
-}
-void parser___ReduceAction772___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 = 30846;
-  fra.me.meth = LOCATE_parser___ReduceAction772___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30859 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30859);
-    nit_exit(1);
-  }
-  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:30861 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30861);
-    nit_exit(1);
-  }
-  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:30863 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30863);
-    nit_exit(1);
-  }
-  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:30865 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30865);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:30867 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30867);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:30872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30872);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30874);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30885 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction772___init(val_t p0, int* init_table){
-  int itpos776 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction772].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos776]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30887;
-  fra.me.meth = LOCATE_parser___ReduceAction772___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30887 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos776] = 1;
-  return;
-}
-void parser___ReduceAction773___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 = 30891;
-  fra.me.meth = LOCATE_parser___ReduceAction773___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30904 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30904);
-    nit_exit(1);
-  }
-  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:30906 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30906);
-    nit_exit(1);
-  }
-  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:30908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30908);
-    nit_exit(1);
-  }
-  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:30910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30910);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:30912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30912);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:30917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30917);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30919);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30930 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction773___init(val_t p0, int* init_table){
-  int itpos777 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction773].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos777]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30932;
-  fra.me.meth = LOCATE_parser___ReduceAction773___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30932 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos777] = 1;
-  return;
-}
-void parser___ReduceAction774___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 = 30936;
-  fra.me.meth = LOCATE_parser___ReduceAction774___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30949 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30949);
-    nit_exit(1);
-  }
-  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:30951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30951);
-    nit_exit(1);
-  }
-  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:30953 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30953);
-    nit_exit(1);
-  }
-  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:30955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30955);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:30957 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30957);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:30962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30962);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:30964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30964);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:30975 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction774___init(val_t p0, int* init_table){
-  int itpos778 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction774].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos778]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 30977;
-  fra.me.meth = LOCATE_parser___ReduceAction774___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:30977 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos778] = 1;
-  return;
-}
-void parser___ReduceAction775___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 = 30981;
-  fra.me.meth = LOCATE_parser___ReduceAction775___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:30994 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30994);
-    nit_exit(1);
-  }
-  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:30996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30996);
-    nit_exit(1);
-  }
-  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:30998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 30998);
-    nit_exit(1);
-  }
-  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:31000 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31000);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:31002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31002);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:31007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31007);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31009);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31020 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction775___init(val_t p0, int* init_table){
-  int itpos779 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction775].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos779]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31022;
-  fra.me.meth = LOCATE_parser___ReduceAction775___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31022 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos779] = 1;
-  return;
-}
-void parser___ReduceAction776___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 = 31026;
-  fra.me.meth = LOCATE_parser___ReduceAction776___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31039);
-    nit_exit(1);
-  }
-  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:31041 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31041);
-    nit_exit(1);
-  }
-  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:31043 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31043);
-    nit_exit(1);
-  }
-  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:31045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31045);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:31047 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31047);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:31052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31052);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31054);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31065 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction776___init(val_t p0, int* init_table){
-  int itpos780 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction776].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos780]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31067;
-  fra.me.meth = LOCATE_parser___ReduceAction776___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31067 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos780] = 1;
-  return;
-}
-void parser___ReduceAction777___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 = 31071;
-  fra.me.meth = LOCATE_parser___ReduceAction777___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31084);
-    nit_exit(1);
-  }
-  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:31086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31086);
-    nit_exit(1);
-  }
-  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:31088 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31088);
-    nit_exit(1);
-  }
-  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:31090 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31090);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:31092 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31092);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:31097 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31097);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31099 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31099);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31110 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction777___init(val_t p0, int* init_table){
-  int itpos781 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction777].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos781]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31112;
-  fra.me.meth = LOCATE_parser___ReduceAction777___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31112 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos781] = 1;
-  return;
-}
-void parser___ReduceAction778___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 = 31116;
-  fra.me.meth = LOCATE_parser___ReduceAction778___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31129 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31129);
-    nit_exit(1);
-  }
-  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:31131 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31131);
-    nit_exit(1);
-  }
-  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:31133 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31133);
-    nit_exit(1);
-  }
-  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:31135 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31135);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:31137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31137);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:31142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31142);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31144);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31155 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction778___init(val_t p0, int* init_table){
-  int itpos782 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction778].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos782]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31157;
-  fra.me.meth = LOCATE_parser___ReduceAction778___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31157 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos782] = 1;
-  return;
-}
-void parser___ReduceAction779___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 = 31161;
-  fra.me.meth = LOCATE_parser___ReduceAction779___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31174);
-    nit_exit(1);
-  }
-  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:31176 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31176);
-    nit_exit(1);
-  }
-  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:31178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31178);
-    nit_exit(1);
-  }
-  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:31180 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31180);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:31182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31182);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:31187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31187);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31189);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31200 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction779___init(val_t p0, int* init_table){
-  int itpos783 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction779].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos783]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31202;
-  fra.me.meth = LOCATE_parser___ReduceAction779___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31202 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos783] = 1;
-  return;
-}
-void parser___ReduceAction780___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 = 31206;
-  fra.me.meth = LOCATE_parser___ReduceAction780___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31220 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31220);
-    nit_exit(1);
-  }
-  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:31222 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31222);
-    nit_exit(1);
-  }
-  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:31224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31224);
-    nit_exit(1);
-  }
-  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:31226 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31226);
-    nit_exit(1);
-  }
-  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:31228 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31228);
-    nit_exit(1);
-  }
-  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:31230 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31230);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:31236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31236);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31238 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31238);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31249 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction780___init(val_t p0, int* init_table){
-  int itpos784 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction780].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos784]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31251;
-  fra.me.meth = LOCATE_parser___ReduceAction780___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31251 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos784] = 1;
-  return;
-}
-void parser___ReduceAction781___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 = 31255;
-  fra.me.meth = LOCATE_parser___ReduceAction781___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31268);
-    nit_exit(1);
-  }
-  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:31270 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31270);
-    nit_exit(1);
-  }
-  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:31272 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31272);
-    nit_exit(1);
-  }
-  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:31274 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31274);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:31276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31276);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:31281 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31281);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31283);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31294 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction781___init(val_t p0, int* init_table){
-  int itpos785 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction781].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos785]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31296;
-  fra.me.meth = LOCATE_parser___ReduceAction781___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31296 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos785] = 1;
-  return;
-}
-void parser___ReduceAction782___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 = 31300;
-  fra.me.meth = LOCATE_parser___ReduceAction782___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[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31314);
-    nit_exit(1);
-  }
-  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:31316 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31316);
-    nit_exit(1);
-  }
-  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:31318 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31318);
-    nit_exit(1);
-  }
-  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:31320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31320);
-    nit_exit(1);
-  }
-  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:31322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31322);
-    nit_exit(1);
-  }
-  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:31324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31324);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:31330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31330);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31332);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31343 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction782___init(val_t p0, int* init_table){
-  int itpos786 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction782].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos786]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31345;
-  fra.me.meth = LOCATE_parser___ReduceAction782___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31345 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos786] = 1;
-  return;
-}
-void parser___ReduceAction783___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 = 31349;
-  fra.me.meth = LOCATE_parser___ReduceAction783___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31364);
-    nit_exit(1);
-  }
-  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:31366 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31366);
-    nit_exit(1);
-  }
-  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:31368 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31368);
-    nit_exit(1);
-  }
-  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:31370 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31370);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:31372 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31372);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:31374 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31374);
-    nit_exit(1);
-  }
-  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:31376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31376);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:31383 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31383);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31385 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31385);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31396 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction783___init(val_t p0, int* init_table){
-  int itpos787 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction783].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos787]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31398;
-  fra.me.meth = LOCATE_parser___ReduceAction783___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31398 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos787] = 1;
-  return;
-}
-void parser___ReduceAction784___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 = 31402;
-  fra.me.meth = LOCATE_parser___ReduceAction784___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31414);
-    nit_exit(1);
-  }
-  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:31416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31416);
-    nit_exit(1);
-  }
-  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:31418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31418);
-    nit_exit(1);
-  }
-  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:31420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31420);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:31425 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31425);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31427 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31427);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31438 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction784___init(val_t p0, int* init_table){
-  int itpos788 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction784].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos788]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31440;
-  fra.me.meth = LOCATE_parser___ReduceAction784___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31440 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos788] = 1;
-  return;
-}
-void parser___ReduceAction785___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 = 31444;
-  fra.me.meth = LOCATE_parser___ReduceAction785___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31456 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31456);
-    nit_exit(1);
-  }
-  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:31458 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31458);
-    nit_exit(1);
-  }
-  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:31460 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31460);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:31462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31462);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:31467 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31467);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31469 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31469);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31480 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction785___init(val_t p0, int* init_table){
-  int itpos789 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction785].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos789]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31482;
-  fra.me.meth = LOCATE_parser___ReduceAction785___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31482 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos789] = 1;
-  return;
-}
-void parser___ReduceAction786___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 = 31486;
-  fra.me.meth = LOCATE_parser___ReduceAction786___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31498 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31498);
-    nit_exit(1);
-  }
-  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:31500 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31500);
-    nit_exit(1);
-  }
-  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:31502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31502);
-    nit_exit(1);
-  }
-  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:31504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31504);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:31509 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31509);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31511 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31511);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31522 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction786___init(val_t p0, int* init_table){
-  int itpos790 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction786].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos790]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31524;
-  fra.me.meth = LOCATE_parser___ReduceAction786___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31524 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos790] = 1;
-  return;
-}
-void parser___ReduceAction787___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 = 31528;
-  fra.me.meth = LOCATE_parser___ReduceAction787___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31540 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31540);
-    nit_exit(1);
-  }
-  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:31542 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31542);
-    nit_exit(1);
-  }
-  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:31544 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31544);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:31546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31546);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:31551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31551);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31553);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31564 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction787___init(val_t p0, int* init_table){
-  int itpos791 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction787].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos791]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31566;
-  fra.me.meth = LOCATE_parser___ReduceAction787___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31566 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos791] = 1;
-  return;
-}
-void parser___ReduceAction788___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 = 31570;
-  fra.me.meth = LOCATE_parser___ReduceAction788___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31582);
-    nit_exit(1);
-  }
-  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:31584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31584);
-    nit_exit(1);
-  }
-  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:31586 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31586);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:31588 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31588);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:31593 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31593);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31595 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31595);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31606 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction788___init(val_t p0, int* init_table){
-  int itpos792 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction788].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos792]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31608;
-  fra.me.meth = LOCATE_parser___ReduceAction788___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31608 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos792] = 1;
-  return;
-}
-void parser___ReduceAction789___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 = 31612;
-  fra.me.meth = LOCATE_parser___ReduceAction789___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31624 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31624);
-    nit_exit(1);
-  }
-  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:31626 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31626);
-    nit_exit(1);
-  }
-  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:31628 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31628);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:31630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31630);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:31635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31635);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31637 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31637);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31648 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction789___init(val_t p0, int* init_table){
-  int itpos793 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction789].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos793]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31650;
-  fra.me.meth = LOCATE_parser___ReduceAction789___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31650 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos793] = 1;
-  return;
-}
-void parser___ReduceAction790___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 = 31654;
-  fra.me.meth = LOCATE_parser___ReduceAction790___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31666);
-    nit_exit(1);
-  }
-  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:31668 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31668);
-    nit_exit(1);
-  }
-  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:31670 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31670);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:31672 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31672);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:31677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31677);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31679 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31679);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31690 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction790___init(val_t p0, int* init_table){
-  int itpos794 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction790].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos794]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31692;
-  fra.me.meth = LOCATE_parser___ReduceAction790___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31692 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos794] = 1;
-  return;
-}
-void parser___ReduceAction791___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 = 31696;
-  fra.me.meth = LOCATE_parser___ReduceAction791___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31708);
-    nit_exit(1);
-  }
-  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:31710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31710);
-    nit_exit(1);
-  }
-  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:31712 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31712);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:31714 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31714);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:31719 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31719);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31721 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31721);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31732 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction791___init(val_t p0, int* init_table){
-  int itpos795 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction791].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos795]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31734;
-  fra.me.meth = LOCATE_parser___ReduceAction791___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31734 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos795] = 1;
-  return;
-}
-void parser___ReduceAction792___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 = 31738;
-  fra.me.meth = LOCATE_parser___ReduceAction792___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31750);
-    nit_exit(1);
-  }
-  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:31752 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31752);
-    nit_exit(1);
-  }
-  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:31754 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31754);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:31756 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31756);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:31761 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31761);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31763);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31774 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction792___init(val_t p0, int* init_table){
-  int itpos796 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction792].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos796]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31776;
-  fra.me.meth = LOCATE_parser___ReduceAction792___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31776 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos796] = 1;
-  return;
-}
-void parser___ReduceAction793___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 = 31780;
-  fra.me.meth = LOCATE_parser___ReduceAction793___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31792);
-    nit_exit(1);
-  }
-  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:31794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31794);
-    nit_exit(1);
-  }
-  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:31796 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31796);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:31798 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31798);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:31803 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31803);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31805 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31805);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31816 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction793___init(val_t p0, int* init_table){
-  int itpos797 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction793].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos797]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31818;
-  fra.me.meth = LOCATE_parser___ReduceAction793___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31818 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos797] = 1;
-  return;
-}
-void parser___ReduceAction794___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 = 31822;
-  fra.me.meth = LOCATE_parser___ReduceAction794___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31834);
-    nit_exit(1);
-  }
-  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:31836 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31836);
-    nit_exit(1);
-  }
-  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:31838 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31838);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:31840 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31840);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:31845 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31845);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31847 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31847);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31858 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction794___init(val_t p0, int* init_table){
-  int itpos798 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction794].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos798]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31860;
-  fra.me.meth = LOCATE_parser___ReduceAction794___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31860 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos798] = 1;
-  return;
-}
-void parser___ReduceAction795___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 = 31864;
-  fra.me.meth = LOCATE_parser___ReduceAction795___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31876 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31876);
-    nit_exit(1);
-  }
-  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:31878 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31878);
-    nit_exit(1);
-  }
-  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:31880 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31880);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:31882 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31882);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:31887 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31887);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31889 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31889);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31900 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction795___init(val_t p0, int* init_table){
-  int itpos799 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction795].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos799]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31902;
-  fra.me.meth = LOCATE_parser___ReduceAction795___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31902 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos799] = 1;
-  return;
-}
-void parser___ReduceAction796___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 = 31906;
-  fra.me.meth = LOCATE_parser___ReduceAction796___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31919);
-    nit_exit(1);
-  }
-  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:31921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31921);
-    nit_exit(1);
-  }
-  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:31923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31923);
-    nit_exit(1);
-  }
-  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:31925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31925);
-    nit_exit(1);
-  }
-  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:31927 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31927);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:31933 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31933);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31935 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31935);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31946 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction796___init(val_t p0, int* init_table){
-  int itpos800 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction796].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos800]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31948;
-  fra.me.meth = LOCATE_parser___ReduceAction796___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31948 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos800] = 1;
-  return;
-}
-void parser___ReduceAction797___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 = 31952;
-  fra.me.meth = LOCATE_parser___ReduceAction797___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:31964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31964);
-    nit_exit(1);
-  }
-  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:31966 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31966);
-    nit_exit(1);
-  }
-  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:31968 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31968);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:31970 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31970);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:31975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31975);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:31977 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 31977);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_ReduceAction1_parser___ReduceAction1___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction2_parser___ReduceAction2___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction3_parser___ReduceAction3___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction4_parser___ReduceAction4___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction5_parser___ReduceAction5___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction6_parser___ReduceAction6___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction7_parser___ReduceAction7___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction8_parser___ReduceAction8___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction9_parser___ReduceAction9___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction10_parser___ReduceAction10___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction11_parser___ReduceAction11___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction12_parser___ReduceAction12___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction13_parser___ReduceAction13___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction14_parser___ReduceAction14___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction15_parser___ReduceAction15___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction16_parser___ReduceAction16___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction17_parser___ReduceAction17___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction18_parser___ReduceAction18___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction19_parser___ReduceAction19___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction20_parser___ReduceAction20___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction21_parser___ReduceAction21___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction22_parser___ReduceAction22___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction23_parser___ReduceAction23___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction24_parser___ReduceAction24___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction25_parser___ReduceAction25___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction26_parser___ReduceAction26___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction27_parser___ReduceAction27___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction28_parser___ReduceAction28___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction29_parser___ReduceAction29___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:185 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_ReduceAction30_parser___ReduceAction30___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:186 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_ReduceAction31_parser___ReduceAction31___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:187 */
+  REGB0 = TAG_Int(1);
+  fra.me.REG[2] = NEW_ReduceAction32_parser___ReduceAction32___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:188 */
+  REGB0 = TAG_Int(2);
+  fra.me.REG[2] = NEW_ReduceAction33_parser___ReduceAction33___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:189 */
+  REGB0 = TAG_Int(2);
+  fra.me.REG[2] = NEW_ReduceAction34_parser___ReduceAction34___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:190 */
+  REGB0 = TAG_Int(3);
+  fra.me.REG[2] = NEW_ReduceAction35_parser___ReduceAction35___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:191 */
+  REGB0 = TAG_Int(3);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:192 */
+  REGB0 = TAG_Int(4);
+  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction37___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:193 */
+  REGB0 = TAG_Int(4);
+  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction37___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction39_parser___ReduceAction39___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction40_parser___ReduceAction40___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction41_parser___ReduceAction41___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction42_parser___ReduceAction42___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction43_parser___ReduceAction43___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction44_parser___ReduceAction44___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction45_parser___ReduceAction45___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction46_parser___ReduceAction46___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction47_parser___ReduceAction47___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction48_parser___ReduceAction48___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction49_parser___ReduceAction49___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction50_parser___ReduceAction50___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction51_parser___ReduceAction51___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction52_parser___ReduceAction52___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:208 */
+  REGB0 = TAG_Int(5);
+  fra.me.REG[2] = NEW_ReduceAction53_parser___ReduceAction53___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:209 */
+  REGB0 = TAG_Int(5);
+  fra.me.REG[2] = NEW_ReduceAction54_parser___ReduceAction54___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction55_parser___ReduceAction55___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction56_parser___ReduceAction56___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction57_parser___ReduceAction57___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:213 */
+  REGB0 = TAG_Int(6);
+  fra.me.REG[2] = NEW_ReduceAction58_parser___ReduceAction58___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction59_parser___ReduceAction59___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:215 */
+  REGB0 = TAG_Int(7);
+  fra.me.REG[2] = NEW_ReduceAction60_parser___ReduceAction60___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:216 */
+  REGB0 = TAG_Int(8);
+  fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction61___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction62_parser___ReduceAction62___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:218 */
+  REGB0 = TAG_Int(9);
+  fra.me.REG[2] = NEW_ReduceAction63_parser___ReduceAction63___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction64_parser___ReduceAction64___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:220 */
+  REGB0 = TAG_Int(10);
+  fra.me.REG[2] = NEW_ReduceAction65_parser___ReduceAction65___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:221 */
+  REGB0 = TAG_Int(11);
+  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction67_parser___ReduceAction67___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction68_parser___ReduceAction68___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction69_parser___ReduceAction69___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction70_parser___ReduceAction70___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction71_parser___ReduceAction71___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction72_parser___ReduceAction72___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction73_parser___ReduceAction73___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction74_parser___ReduceAction74___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction75_parser___ReduceAction75___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction76_parser___ReduceAction76___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction77_parser___ReduceAction77___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction78_parser___ReduceAction78___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction79_parser___ReduceAction79___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction80_parser___ReduceAction80___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction81_parser___ReduceAction81___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction82_parser___ReduceAction82___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction83_parser___ReduceAction83___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction84_parser___ReduceAction84___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction85_parser___ReduceAction85___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction86_parser___ReduceAction86___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction87_parser___ReduceAction87___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction88_parser___ReduceAction88___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction89_parser___ReduceAction89___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction90_parser___ReduceAction90___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction91_parser___ReduceAction91___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction92_parser___ReduceAction92___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction93_parser___ReduceAction93___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction94_parser___ReduceAction94___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction95_parser___ReduceAction95___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction96_parser___ReduceAction96___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction97_parser___ReduceAction97___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction98_parser___ReduceAction98___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction99_parser___ReduceAction99___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction100_parser___ReduceAction100___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction101_parser___ReduceAction101___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction102_parser___ReduceAction102___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction103_parser___ReduceAction103___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction104_parser___ReduceAction104___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction105_parser___ReduceAction105___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction106_parser___ReduceAction106___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction107_parser___ReduceAction107___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction108_parser___ReduceAction108___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction109_parser___ReduceAction109___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction110_parser___ReduceAction110___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction111_parser___ReduceAction111___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction112_parser___ReduceAction112___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction113_parser___ReduceAction113___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction114_parser___ReduceAction114___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction115_parser___ReduceAction115___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction116_parser___ReduceAction116___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction117_parser___ReduceAction117___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction118_parser___ReduceAction118___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction119_parser___ReduceAction119___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction120_parser___ReduceAction120___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction121_parser___ReduceAction121___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction122_parser___ReduceAction122___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction123_parser___ReduceAction123___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction124_parser___ReduceAction124___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction125_parser___ReduceAction125___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction126_parser___ReduceAction126___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction127_parser___ReduceAction127___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction128_parser___ReduceAction128___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction129_parser___ReduceAction129___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction130_parser___ReduceAction130___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction131_parser___ReduceAction131___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction132_parser___ReduceAction132___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction133_parser___ReduceAction133___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction134_parser___ReduceAction134___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction135_parser___ReduceAction135___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction136_parser___ReduceAction136___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction137_parser___ReduceAction137___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction138_parser___ReduceAction138___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:294 */
+  REGB0 = TAG_Int(13);
+  fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction139___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:295 */
+  REGB0 = TAG_Int(13);
+  fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction140___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:296 */
+  REGB0 = TAG_Int(14);
+  fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction141___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:297 */
+  REGB0 = TAG_Int(14);
+  fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction142___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:298 */
+  REGB0 = TAG_Int(15);
+  fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction143___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:299 */
+  REGB0 = TAG_Int(15);
+  fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction144___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:300 */
+  REGB0 = TAG_Int(16);
+  fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction145___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:301 */
+  REGB0 = TAG_Int(16);
+  fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction146___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:302 */
+  REGB0 = TAG_Int(16);
+  fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction147___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:303 */
+  REGB0 = TAG_Int(16);
+  fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction148___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:304 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction149___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:305 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction150___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:306 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction151___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:307 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction152___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:308 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction153___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:309 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction154___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:310 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction155___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:311 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction156___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:312 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction157___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:313 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction158___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:314 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction159___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:315 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction160___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:316 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction161___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:317 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction162___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:318 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction163___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:319 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction164___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:320 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction165_parser___ReduceAction165___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:321 */
+  REGB0 = TAG_Int(17);
+  fra.me.REG[2] = NEW_ReduceAction166_parser___ReduceAction166___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:322 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:323 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:324 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:325 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:326 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:327 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction172___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:328 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction173___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:329 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction174___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:330 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction175___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:331 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction176___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:332 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction177___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:333 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction178___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:334 */
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction179___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:335 */
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction180___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction181_parser___ReduceAction181___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:337 */
+  REGB0 = TAG_Int(21);
+  fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction182___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:338 */
+  REGB0 = TAG_Int(22);
+  fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction183___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:339 */
+  REGB0 = TAG_Int(22);
+  fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction184___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:340 */
+  REGB0 = TAG_Int(22);
+  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:341 */
+  REGB0 = TAG_Int(23);
+  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:342 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction187___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:343 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction188___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:344 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction189___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:345 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction190___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:346 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction191___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:347 */
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction192_parser___ReduceAction192___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:348 */
+  REGB0 = TAG_Int(25);
+  fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction193___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:349 */
+  REGB0 = TAG_Int(26);
+  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:350 */
+  REGB0 = TAG_Int(26);
+  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:351 */
+  REGB0 = TAG_Int(26);
+  fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction196___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:352 */
+  REGB0 = TAG_Int(26);
+  fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction197___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:353 */
+  REGB0 = TAG_Int(27);
+  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:354 */
+  REGB0 = TAG_Int(27);
+  fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction199___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:355 */
+  REGB0 = TAG_Int(28);
+  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:356 */
+  REGB0 = TAG_Int(29);
+  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:357 */
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:358 */
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:359 */
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:360 */
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:361 */
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction206___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:362 */
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction207___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:363 */
+  REGB0 = TAG_Int(32);
+  fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction208___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:364 */
+  REGB0 = TAG_Int(32);
+  fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction209___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:365 */
+  REGB0 = TAG_Int(33);
+  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:366 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:367 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:368 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction213___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:369 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:370 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:371 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:372 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction217___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:373 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:374 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:375 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:376 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:377 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:378 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction223___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:379 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:380 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:381 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:382 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:383 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:384 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:385 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:386 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:387 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:388 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:389 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:390 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:391 */
+  REGB0 = TAG_Int(34);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction238_parser___ReduceAction238___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:394 */
+  REGB0 = TAG_Int(36);
+  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:395 */
+  REGB0 = TAG_Int(36);
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:396 */
+  REGB0 = TAG_Int(37);
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction241___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:397 */
+  REGB0 = TAG_Int(37);
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction242___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:398 */
+  REGB0 = TAG_Int(37);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction243___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction244_parser___ReduceAction244___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction245_parser___ReduceAction245___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:401 */
+  REGB0 = TAG_Int(37);
+  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction247_parser___ReduceAction247___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:403 */
+  REGB0 = TAG_Int(38);
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:404 */
+  REGB0 = TAG_Int(38);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:405 */
+  REGB0 = TAG_Int(38);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:406 */
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:407 */
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction253_parser___ReduceAction253___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:409 */
+  REGB0 = TAG_Int(41);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:410 */
+  REGB0 = TAG_Int(41);
+  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:411 */
+  REGB0 = TAG_Int(41);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:412 */
+  REGB0 = TAG_Int(41);
+  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:413 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:414 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction260_parser___ReduceAction260___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:416 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:417 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:418 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:419 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction264___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:420 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction265___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:421 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction266___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:422 */
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:423 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction268___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:424 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:425 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:426 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:427 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:428 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:429 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:430 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:431 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:432 */
+  REGB0 = TAG_Int(46);
+  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:433 */
+  REGB0 = TAG_Int(46);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction279_parser___ReduceAction279___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction280_parser___ReduceAction280___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:436 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:437 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:438 */
+  REGB0 = TAG_Int(49);
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:439 */
+  REGB0 = TAG_Int(49);
+  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:440 */
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:441 */
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:442 */
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction288_parser___ReduceAction288___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:444 */
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction289___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:445 */
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:446 */
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:447 */
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:448 */
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction293___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:449 */
+  REGB0 = TAG_Int(53);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:450 */
+  REGB0 = TAG_Int(53);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:451 */
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:452 */
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:453 */
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:454 */
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:455 */
+  REGB0 = TAG_Int(55);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:456 */
+  REGB0 = TAG_Int(55);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:457 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:458 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:459 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:460 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:461 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:462 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:463 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:464 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:465 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:466 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:467 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:468 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:469 */
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:470 */
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:471 */
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:472 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:473 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:474 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:475 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:476 */
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:477 */
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:478 */
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:479 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:480 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:481 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:482 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:483 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:484 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:485 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:486 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:487 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:488 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:489 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:490 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:491 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:492 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:493 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:494 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:495 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction340___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:496 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:497 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:498 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:499 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:500 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:503 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:504 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:505 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:506 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:507 */
+  REGB0 = TAG_Int(61);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction353_parser___ReduceAction353___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction354_parser___ReduceAction354___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:510 */
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:511 */
+  REGB0 = TAG_Int(64);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction356___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:512 */
+  REGB0 = TAG_Int(65);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction358_parser___ReduceAction358___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:514 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:515 */
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:516 */
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:517 */
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:518 */
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:519 */
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:520 */
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:521 */
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:522 */
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:523 */
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:524 */
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:525 */
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:526 */
+  REGB0 = TAG_Int(71);
+  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:527 */
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction372___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:528 */
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction373___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction374_parser___ReduceAction374___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction375_parser___ReduceAction375___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:531 */
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:532 */
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:533 */
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction378___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:534 */
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:535 */
   REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:31988 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction797___init(val_t p0, int* init_table){
-  int itpos801 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction797].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos801]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 31990;
-  fra.me.meth = LOCATE_parser___ReduceAction797___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:31990 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction380___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:536 */
+  REGB0 = TAG_Int(77);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:537 */
+  REGB0 = TAG_Int(77);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:538 */
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction383___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:539 */
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction384___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:540 */
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:541 */
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction386___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:542 */
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction387___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:543 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction388___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:544 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:545 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction381___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:546 */
+  REGB0 = TAG_Int(81);
+  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:547 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:548 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:549 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction70_parser___ReduceAction70___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:551 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:552 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:553 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction77___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:554 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:555 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:556 */
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:557 */
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:558 */
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:559 */
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:560 */
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:561 */
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:562 */
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:563 */
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:564 */
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:565 */
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:566 */
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:567 */
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:568 */
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:572 */
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:573 */
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:574 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:575 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:576 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:577 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:578 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:579 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:580 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:581 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:582 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:583 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:584 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:585 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:586 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:587 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:588 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:589 */
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:590 */
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:591 */
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:592 */
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:593 */
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:594 */
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:595 */
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:596 */
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:597 */
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:598 */
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:599 */
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:600 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:601 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:602 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:604 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:605 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:606 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:607 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:608 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:609 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:610 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:611 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:612 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:613 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:614 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:615 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:616 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:617 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:618 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:619 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:620 */
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:621 */
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:622 */
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:623 */
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:624 */
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:625 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:626 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction213_parser___ReduceAction213___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction214_parser___ReduceAction214___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction215_parser___ReduceAction215___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction216_parser___ReduceAction216___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction217_parser___ReduceAction217___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction218_parser___ReduceAction218___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction219_parser___ReduceAction219___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction220_parser___ReduceAction220___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction221_parser___ReduceAction221___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction222_parser___ReduceAction222___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction223_parser___ReduceAction223___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:639 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:640 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:641 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:642 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:643 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:644 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:645 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:646 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:647 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:648 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:649 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:650 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:651 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:652 */
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:653 */
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction240___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:654 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction241___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:655 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction242___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:656 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction243___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:657 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction244___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:658 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction245___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:659 */
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:660 */
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:661 */
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:662 */
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:663 */
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:664 */
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction258_parser___ReduceAction258___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction259_parser___ReduceAction259___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction260_parser___ReduceAction260___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction261_parser___ReduceAction261___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction262_parser___ReduceAction262___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction263_parser___ReduceAction263___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction264_parser___ReduceAction264___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction265_parser___ReduceAction265___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction266_parser___ReduceAction266___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:674 */
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction270_parser___ReduceAction270___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_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_ReduceAction271_parser___ReduceAction271___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:677 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:678 */
+  REGB0 = TAG_Int(104);
+  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:679 */
+  REGB0 = TAG_Int(104);
+  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:680 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:681 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:682 */
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction284_parser___ReduceAction284___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:684 */
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:685 */
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:686 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:687 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:688 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:689 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction293___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:690 */
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:691 */
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:692 */
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:693 */
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:694 */
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:695 */
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:696 */
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction202___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:697 */
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:698 */
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:699 */
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:700 */
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:701 */
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:702 */
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:703 */
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:704 */
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:705 */
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:706 */
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:707 */
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:708 */
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:709 */
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:710 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:711 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:712 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:713 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:714 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:715 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:716 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:717 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:718 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:719 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:720 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:721 */
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:722 */
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:723 */
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:724 */
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:725 */
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:726 */
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:727 */
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:728 */
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:729 */
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:730 */
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:731 */
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:732 */
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:733 */
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:734 */
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:735 */
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:736 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:737 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:738 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction231_parser___ReduceAction231___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:740 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:741 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:742 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:743 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:744 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:745 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:746 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:747 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:748 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:749 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:750 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:751 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:752 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:753 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:754 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:755 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:756 */
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:757 */
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:758 */
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:759 */
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:760 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:761 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:762 */
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:763 */
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:764 */
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:765 */
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:766 */
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:767 */
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction303_parser___ReduceAction303___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction304_parser___ReduceAction304___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction305_parser___ReduceAction305___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction306_parser___ReduceAction306___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction307_parser___ReduceAction307___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction308_parser___ReduceAction308___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:775 */
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:776 */
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction310___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:777 */
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:778 */
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction312___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:779 */
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:780 */
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:781 */
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:782 */
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction316___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:783 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:784 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction318___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:785 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:786 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:787 */
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:788 */
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:789 */
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:790 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:791 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:792 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction637_parser___ReduceAction637___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:793 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction638_parser___ReduceAction638___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:794 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction639_parser___ReduceAction639___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:795 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:796 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction642_parser___ReduceAction642___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:798 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction337___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:799 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:800 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:801 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:802 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:803 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:804 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction346___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:805 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction347___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:806 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction348___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:807 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:808 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction351___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:809 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:810 */
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction655_parser___ReduceAction655___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:811 */
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction656_parser___ReduceAction656___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:812 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:813 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:814 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:815 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:816 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:817 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:818 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction663_parser___ReduceAction663___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:819 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction664_parser___ReduceAction664___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction665_parser___ReduceAction665___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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_ReduceAction666_parser___ReduceAction666___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:822 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction667_parser___ReduceAction667___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:823 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction668_parser___ReduceAction668___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:824 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction669_parser___ReduceAction669___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:825 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction670_parser___ReduceAction670___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:826 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction667_parser___ReduceAction667___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:827 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction668_parser___ReduceAction668___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:828 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction673_parser___ReduceAction673___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:829 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction674_parser___ReduceAction674___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:830 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction675_parser___ReduceAction675___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:831 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction676_parser___ReduceAction676___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:832 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction677_parser___ReduceAction677___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:833 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction678_parser___ReduceAction678___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:834 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:835 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction680_parser___ReduceAction680___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:836 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:837 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction682___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:838 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction373___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:839 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction684_parser___ReduceAction684___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:840 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction366___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:841 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction682___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:842 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction374___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:843 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:844 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction689___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:845 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction690_parser___ReduceAction690___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:846 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction691_parser___ReduceAction691___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:847 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction692_parser___ReduceAction692___init(REGB0);
+  /* ./parser//parser.nit:154 */
+  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]);
+  ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos801] = 1;
   return;
 }
-void parser___ReduceAction798___action(val_t p0, val_t p1){
+void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 31994;
-  fra.me.meth = LOCATE_parser___ReduceAction798___action;
+  fra.me.line = 878;
+  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -85522,691 +4304,795 @@ void parser___ReduceAction798___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32007);
-    nit_exit(1);
-  }
-  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:32009 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32009);
-    nit_exit(1);
-  }
-  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:32011 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32011);
-    nit_exit(1);
-  }
-  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:32013 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32013);
-    nit_exit(1);
-  }
-  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:32015 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32015);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:32020 */
+  /* ./parser//parser.nit:880 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32020);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32022 */
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:881 */
+    goto label1;
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32022);
-    nit_exit(1);
+    /* ./parser//parser.nit:882 */
+    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Token, ID_Token)) /*cast Token*/;
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser.nit:883 */
+      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 883);
+      }
+      fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
+      /* ./parser//parser.nit:884 */
+      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser.nit:887 */
+      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, 887);
+      }
+      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
+      /* ./../lib/standard//collection//array.nit:234 */
+      REGB0 = TAG_Int(0);
+      /* ./../lib/standard//collection//array.nit:235 */
+      REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+      }
+      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 */
+      while(1) {
+        /* ./../lib/standard//collection//array.nit:23 */
+        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+        }
+        REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+        /* ./../lib/standard//kernel.nit:212 */
+        REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+        /* ./../lib/standard//collection//array.nit:237 */
+        if (UNTAG_Bool(REGB1)) {
+          /* ./../lib/standard//collection//array.nit:238 */
+          REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+            nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+          }
+          /* ./../lib/standard//collection//array.nit:654 */
+          fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
+          /* ./parser//parser.nit:888 */
+          ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
+          /* ./../lib/standard//collection//array.nit:239 */
+          REGB1 = TAG_Int(1);
+          /* ./../lib/standard//kernel.nit:215 */
+          REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+          /* ./../lib/standard//collection//array.nit:239 */
+          REGB0 = REGB1;
+        } else {
+          /* ./../lib/standard//collection//array.nit:237 */
+          goto label2;
+        }
+      }
+      label2: while(0);
+      /* ./parser//parser.nit:890 */
+      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, 890);
+      }
+      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:893 */
+      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, 893);
+      }
+      fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+      /* ./../lib/standard//collection//array.nit:234 */
+      REGB0 = TAG_Int(0);
+      /* ./../lib/standard//collection//array.nit:235 */
+      REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+      }
+      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 */
+      while(1) {
+        /* ./../lib/standard//collection//array.nit:23 */
+        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+        }
+        REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
+        /* ./../lib/standard//kernel.nit:212 */
+        REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+        /* ./../lib/standard//collection//array.nit:237 */
+        if (UNTAG_Bool(REGB1)) {
+          /* ./../lib/standard//collection//array.nit:238 */
+          REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+            nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+          }
+          /* ./../lib/standard//collection//array.nit:654 */
+          fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
+          /* ./parser//parser.nit:896 */
+          fra.me.REG[6] = fra.me.REG[2];
+          /* ./parser//parser.nit:897 */
+          fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
+          /* ./parser//parser.nit:898 */
+          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, 898);
+          }
+          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, 898);
+          }
+          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 */
+          REGB4 = TAG_Int(1);
+          /* ./../lib/standard//kernel.nit:215 */
+          REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
+          /* ./../lib/standard//collection//array.nit:239 */
+          REGB0 = REGB4;
+        } else {
+          /* ./../lib/standard//collection//array.nit:237 */
+          goto label3;
+        }
+      }
+      label3: while(0);
+      /* ./parser//parser.nit:900 */
+      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, 900);
+      }
+      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]);
+    } else {
+      /* ./parser//parser.nit:902 */
+      REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Prod, ID_Prod)) /*cast Prod*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser, 902);
+      }
+      /* ./parser//parser.nit:903 */
+      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, 903);
+      }
+      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:905 */
+      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
+      /* ./parser//parser.nit:906 */
+      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
+      /* ./parser//parser.nit:907 */
+      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 907);
+      }
+      CALL_parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+      /* ./parser//parser.nit:908 */
+      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
+      /* ./parser//parser.nit:909 */
+      REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB0 = REGB4;
+        } else {
+          REGB4 = CALL_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:911 */
+      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
+      /* ./parser//parser.nit:912 */
+      fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
+      /* ./parser//parser.nit:913 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB0 = REGB4;
+        } else {
+          REGB4 = CALL_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:915 */
+        REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB0 = REGB4;
+          } else {
+            REGB4 = CALL_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, 915);
+        }
+        /* ./parser//parser.nit:917 */
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 917);
+        }
+        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, 917);
+        }
+        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, 917);
+        }
+        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, 917);
+        }
+        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, 917);
+        }
+        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, 917);
+        }
+        CALL_parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+        /* ./parser//parser.nit:919 */
+        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, 919);
+        }
+        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
+        /* ./../lib/standard//collection//array.nit:234 */
+        REGB2 = TAG_Int(0);
+        /* ./../lib/standard//collection//array.nit:235 */
+        REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+        }
+        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 */
+        while(1) {
+          /* ./../lib/standard//collection//array.nit:23 */
+          REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+          }
+          REGB3 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
+          /* ./../lib/standard//kernel.nit:212 */
+          REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
+          /* ./../lib/standard//collection//array.nit:237 */
+          if (UNTAG_Bool(REGB3)) {
+            /* ./../lib/standard//collection//array.nit:238 */
+            REGB3 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+            if (UNTAG_Bool(REGB3)) {
+              nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+            }
+            /* ./../lib/standard//collection//array.nit:654 */
+            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
+            /* ./parser//parser.nit:922 */
+            REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+            if (UNTAG_Bool(REGB3)) {
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 922);
+            }
+            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, 922);
+            }
+            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, 922);
+            }
+            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, 922);
+            }
+            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, 922);
+            }
+            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 */
+            REGB1 = TAG_Int(1);
+            /* ./../lib/standard//kernel.nit:215 */
+            REGB1 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
+            /* ./../lib/standard//collection//array.nit:239 */
+            REGB2 = REGB1;
+          } else {
+            /* ./../lib/standard//collection//array.nit:237 */
+            goto label4;
+          }
+        }
+        label4: while(0);
+        /* ./parser//parser.nit:924 */
+        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, 924);
+        }
+        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:926 */
+        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, 926);
+        }
+        fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+        /* ./../lib/standard//collection//array.nit:234 */
+        REGB2 = TAG_Int(0);
+        /* ./../lib/standard//collection//array.nit:235 */
+        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+        }
+        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 */
+        while(1) {
+          /* ./../lib/standard//collection//array.nit:23 */
+          REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+          }
+          REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+          /* ./../lib/standard//kernel.nit:212 */
+          REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
+          /* ./../lib/standard//collection//array.nit:237 */
+          if (UNTAG_Bool(REGB1)) {
+            /* ./../lib/standard//collection//array.nit:238 */
+            REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+            if (UNTAG_Bool(REGB1)) {
+              nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+            }
+            /* ./../lib/standard//collection//array.nit:654 */
+            fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
+            /* ./parser//parser.nit:929 */
+            REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+            if (UNTAG_Bool(REGB1)) {
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 929);
+            }
+            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, 929);
+            }
+            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, 929);
+            }
+            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, 929);
+            }
+            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, 929);
+            }
+            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 */
+            REGB3 = TAG_Int(1);
+            /* ./../lib/standard//kernel.nit:215 */
+            REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+            /* ./../lib/standard//collection//array.nit:239 */
+            REGB2 = REGB3;
+          } else {
+            /* ./../lib/standard//collection//array.nit:237 */
+            goto label5;
+          }
+        }
+        label5: while(0);
+        /* ./parser//parser.nit:931 */
+        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, 931);
+        }
+        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]);
+      } else {
+        /* ./parser//parser.nit:935 */
+        REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+        } else {
+          REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            REGB3 = TAG_Bool(false);
+            REGB2 = REGB3;
+          } else {
+            REGB3 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+            REGB2 = REGB3;
+          }
+        }
+        if (UNTAG_Bool(REGB2)) {
+          /* ./parser//parser.nit:937 */
+          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, 937);
+          }
+          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]);
+        } else {
+          /* ./parser//parser.nit:940 */
+          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, 940);
+          }
+          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]);
+        }
+      }
+    }
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32033 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction798___init(val_t p0, int* init_table){
-  int itpos802 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction798].i;
+void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ComputeProdLocationVisitor].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos802]) return;
+  if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32035;
-  fra.me.meth = LOCATE_parser___ReduceAction798___init;
+  fra.me.line = 946;
+  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32035 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos802] = 1;
-  return;
-}
-void parser___ReduceAction799___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 = 32039;
-  fra.me.meth = LOCATE_parser___ReduceAction799___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32052 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32052);
-    nit_exit(1);
-  }
-  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:32054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32054);
-    nit_exit(1);
-  }
-  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:32056 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32056);
-    nit_exit(1);
-  }
-  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:32058 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32058);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:32060 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32060);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:32065 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32065);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32067 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32067);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32078 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  /* ./parser//parser.nit:946 */
+  CALL_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;
 }
-void parser___ReduceAction799___init(val_t p0, int* init_table){
-  int itpos803 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction799].i;
+void parser___ReduceAction___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos803]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32080;
-  fra.me.meth = LOCATE_parser___ReduceAction799___init;
+  fra.me.line = 951;
+  fra.me.meth = LOCATE_parser___ReduceAction___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32080 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG_size = 0;
+  /* ./parser//parser.nit:951 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 951);
   stack_frame_head = fra.me.prev;
-  init_table[itpos803] = 1;
   return;
 }
-void parser___ReduceAction800___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+val_t parser___ReduceAction___concat(val_t p0, val_t p1, val_t p2){
+  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 = 32084;
-  fra.me.meth = LOCATE_parser___ReduceAction800___action;
+  fra.me.line = 952;
+  fra.me.meth = LOCATE_parser___ReduceAction___concat;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32097 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32097);
-    nit_exit(1);
-  }
-  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:32099 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser.nit:954 */
+  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32099);
-    nit_exit(1);
-  }
-  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:32101 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32101);
-    nit_exit(1);
-  }
-  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:32103 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32103);
-    nit_exit(1);
-  }
-  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:32105 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32105);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:32110 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32110);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32112 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32112);
-    nit_exit(1);
+    fra.me.REG[0] = fra.me.REG[2];
+    goto label1;
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32123 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  /* ./parser//parser.nit:955 */
+  CALL_abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:956 */
+  fra.me.REG[0] = fra.me.REG[1];
+  goto label1;
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  return;
+  return fra.me.REG[0];
 }
-void parser___ReduceAction800___init(val_t p0, int* init_table){
-  int itpos804 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction800].i;
+void parser___ReduceAction___init(val_t p0, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos804]) return;
+  if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32125;
-  fra.me.meth = LOCATE_parser___ReduceAction800___init;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32125 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG_size = 0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos804] = 1;
+  init_table[itpos3] = 1;
   return;
 }
-void parser___ReduceAction801___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction0___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 = 32129;
-  fra.me.meth = LOCATE_parser___ReduceAction801___action;
+  fra.me.line = 962;
+  fra.me.meth = LOCATE_parser___ReduceAction0___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32142);
-    nit_exit(1);
-  }
-  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:32144 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32144);
-    nit_exit(1);
-  }
-  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:32146 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32146);
-    nit_exit(1);
-  }
-  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:32148 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32148);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:32150 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32150);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:32155 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32155);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32157 */
+  /* ./parser//parser.nit:964 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:965 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:966 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:967 */
+  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* ./parser//parser.nit:972 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:973 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction0____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32157);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 973);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction0____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32168 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction801___init(val_t p0, int* init_table){
-  int itpos805 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction801].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos805]) return;
+  if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32170;
-  fra.me.meth = LOCATE_parser___ReduceAction801___init;
+  fra.me.line = 976;
+  fra.me.meth = LOCATE_parser___ReduceAction0___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32170 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:976 */
+  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[itpos805] = 1;
+  init_table[itpos4] = 1;
   return;
 }
-void parser___ReduceAction802___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} 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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32174;
-  fra.me.meth = LOCATE_parser___ReduceAction802___action;
+  fra.me.line = 980;
+  fra.me.meth = LOCATE_parser___ReduceAction1___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:982 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:983 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32187 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32187);
-    nit_exit(1);
-  }
-  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:32189 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32189);
-    nit_exit(1);
-  }
-  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:32191 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32191);
-    nit_exit(1);
-  }
-  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:32193 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32193);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:32195 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32195);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:32200 */
+  /* ./parser//parser.nit:984 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:985 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:987 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32200);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 987);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32202 */
+  /* ./parser//parser.nit:988 */
+  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:993 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:994 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction1____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32202);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 994);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction1____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32213 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction802___init(val_t p0, int* init_table){
-  int itpos806 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction802].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos806]) return;
+  if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32215;
-  fra.me.meth = LOCATE_parser___ReduceAction802___init;
+  fra.me.line = 997;
+  fra.me.meth = LOCATE_parser___ReduceAction1___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32215 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:997 */
+  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[itpos806] = 1;
+  init_table[itpos5] = 1;
   return;
 }
-void parser___ReduceAction803___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32219;
-  fra.me.meth = LOCATE_parser___ReduceAction803___action;
+  fra.me.line = 1001;
+  fra.me.meth = LOCATE_parser___ReduceAction2___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1003 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32232 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32232);
-    nit_exit(1);
-  }
-  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:32234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32234);
-    nit_exit(1);
-  }
-  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:32236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32236);
-    nit_exit(1);
-  }
-  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:32238 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32238);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:32240 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32240);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:32245 */
+  /* ./parser//parser.nit:1005 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1006 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1008 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32245);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1008);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32247 */
+  /* ./parser//parser.nit:1009 */
+  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:1010 */
+  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:1015 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1016 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction2____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32247);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1016);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction2____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32258 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction803___init(val_t p0, int* init_table){
-  int itpos807 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction803].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos807]) return;
+  if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32260;
-  fra.me.meth = LOCATE_parser___ReduceAction803___init;
+  fra.me.line = 1019;
+  fra.me.meth = LOCATE_parser___ReduceAction2___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32260 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1019 */
+  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[itpos807] = 1;
+  init_table[itpos6] = 1;
   return;
 }
-void parser___ReduceAction804___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32264;
-  fra.me.meth = LOCATE_parser___ReduceAction804___action;
+  fra.me.line = 1023;
+  fra.me.meth = LOCATE_parser___ReduceAction3___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86214,231 +5100,158 @@ void parser___ReduceAction804___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1025 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1026 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32277);
-    nit_exit(1);
-  }
-  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:32279 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32279);
-    nit_exit(1);
-  }
-  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:32281 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32281);
-    nit_exit(1);
-  }
-  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:32283 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32283);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:32285 */
+  /* ./parser//parser.nit:1028 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1029 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1031 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32285);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1031);
   }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:32290 */
+  /* ./parser//parser.nit:1033 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32290);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1033);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32292 */
+  /* ./parser//parser.nit:1034 */
+  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:1035 */
+  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:1040 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1041 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction3____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32292);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1041);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction3____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32303 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction804___init(val_t p0, int* init_table){
-  int itpos808 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction804].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos808]) return;
+  if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32305;
-  fra.me.meth = LOCATE_parser___ReduceAction804___init;
+  fra.me.line = 1044;
+  fra.me.meth = LOCATE_parser___ReduceAction3___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32305 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1044 */
+  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[itpos808] = 1;
+  init_table[itpos7] = 1;
   return;
 }
-void parser___ReduceAction805___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32309;
-  fra.me.meth = LOCATE_parser___ReduceAction805___action;
+  fra.me.line = 1048;
+  fra.me.meth = LOCATE_parser___ReduceAction4___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1050 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32322);
-    nit_exit(1);
-  }
-  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:32324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32324);
-    nit_exit(1);
-  }
-  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:32326 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32326);
-    nit_exit(1);
-  }
-  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:32328 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32328);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:32330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32330);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:32335 */
+  /* ./parser//parser.nit:1052 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1053 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1055 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32335);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1055);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32337 */
+  /* ./parser//parser.nit:1056 */
+  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:1057 */
+  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:1062 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1063 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction4____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32337);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1063);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction4____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32348 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction805___init(val_t p0, int* init_table){
-  int itpos809 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction805].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos809]) return;
+  if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32350;
-  fra.me.meth = LOCATE_parser___ReduceAction805___init;
+  fra.me.line = 1066;
+  fra.me.meth = LOCATE_parser___ReduceAction4___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32350 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1066 */
+  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[itpos809] = 1;
+  init_table[itpos8] = 1;
   return;
 }
-void parser___ReduceAction806___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32354;
-  fra.me.meth = LOCATE_parser___ReduceAction806___action;
+  fra.me.line = 1070;
+  fra.me.meth = LOCATE_parser___ReduceAction5___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86446,115 +5259,83 @@ void parser___ReduceAction806___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1072 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1074 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32367 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32367);
-    nit_exit(1);
-  }
-  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:32369 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32369);
-    nit_exit(1);
-  }
-  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:32371 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32371);
-    nit_exit(1);
-  }
-  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:32373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32373);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:32375 */
+  /* ./parser//parser.nit:1075 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1076 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1078 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32375);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1078);
   }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:32380 */
+  /* ./parser//parser.nit:1080 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32380);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1080);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32382 */
+  /* ./parser//parser.nit:1081 */
+  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:1082 */
+  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:1087 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1088 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction5____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32382);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1088);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction5____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32393 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction806___init(val_t p0, int* init_table){
-  int itpos810 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction806].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos810]) return;
+  if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32395;
-  fra.me.meth = LOCATE_parser___ReduceAction806___init;
+  fra.me.line = 1091;
+  fra.me.meth = LOCATE_parser___ReduceAction5___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32395 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1091 */
+  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[itpos810] = 1;
+  init_table[itpos9] = 1;
   return;
 }
-void parser___ReduceAction807___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32399;
-  fra.me.meth = LOCATE_parser___ReduceAction807___action;
+  fra.me.line = 1095;
+  fra.me.meth = LOCATE_parser___ReduceAction6___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86562,115 +5343,86 @@ void parser___ReduceAction807___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1097 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1098 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32412);
-    nit_exit(1);
-  }
-  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:32414 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32414);
-    nit_exit(1);
-  }
-  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:32416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32416);
-    nit_exit(1);
-  }
-  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:32418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32418);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:32420 */
+  /* ./parser//parser.nit:1100 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1101 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1103 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32420);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1103);
   }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:32425 */
+  /* ./parser//parser.nit:1104 */
+  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:1106 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32425);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1106);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32427 */
+  /* ./parser//parser.nit:1107 */
+  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:1108 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1113 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1114 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction6____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32427);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1114);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction6____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32438 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction807___init(val_t p0, int* init_table){
-  int itpos811 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction807].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos811]) return;
+  if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32440;
-  fra.me.meth = LOCATE_parser___ReduceAction807___init;
+  fra.me.line = 1117;
+  fra.me.meth = LOCATE_parser___ReduceAction6___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32440 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1117 */
+  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[itpos811] = 1;
+  init_table[itpos10] = 1;
   return;
 }
-void parser___ReduceAction808___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 32444;
-  fra.me.meth = LOCATE_parser___ReduceAction808___action;
+  fra.me.line = 1121;
+  fra.me.meth = LOCATE_parser___ReduceAction7___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86679,114 +5431,95 @@ void parser___ReduceAction808___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1123 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1125 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1126 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32457 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32457);
-    nit_exit(1);
-  }
-  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:32459 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32459);
-    nit_exit(1);
-  }
-  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:32461 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32461);
-    nit_exit(1);
-  }
-  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:32463 */
+  /* ./parser//parser.nit:1127 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1128 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1130 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32463);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1130);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:32465 */
+  /* ./parser//parser.nit:1132 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32465);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1132);
   }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:32470 */
+  /* ./parser//parser.nit:1133 */
+  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:1135 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32470);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1135);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32472 */
+  /* ./parser//parser.nit:1136 */
+  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:1137 */
+  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:1142 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1143 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction7____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32472);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1143);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction7____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32483 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction808___init(val_t p0, int* init_table){
-  int itpos812 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction808].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos812]) return;
+  if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32485;
-  fra.me.meth = LOCATE_parser___ReduceAction808___init;
+  fra.me.line = 1146;
+  fra.me.meth = LOCATE_parser___ReduceAction7___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32485 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1146 */
+  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[itpos812] = 1;
+  init_table[itpos11] = 1;
   return;
 }
-void parser___ReduceAction809___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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;
+  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 = 32489;
-  fra.me.meth = LOCATE_parser___ReduceAction809___action;
+  fra.me.line = 1150;
+  fra.me.meth = LOCATE_parser___ReduceAction8___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86794,115 +5527,98 @@ void parser___ReduceAction809___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1152 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1153 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32502 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32502);
-    nit_exit(1);
-  }
-  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:32504 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32504);
-    nit_exit(1);
-  }
-  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:32506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32506);
-    nit_exit(1);
-  }
-  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:32508 */
+  /* ./parser//parser.nit:1154 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1155 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1156 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1158 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32508);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1158);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:32510 */
+  /* ./parser//parser.nit:1159 */
+  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:1160 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* ./parser//parser.nit:1163 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32510);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:32515 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32515);
-    nit_exit(1);
+    /* ./parser//parser.nit:1164 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32517 */
+  /* ./parser//parser.nit:1166 */
+  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:1171 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1172 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction8____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32517);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1172);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction8____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32528 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction809___init(val_t p0, int* init_table){
-  int itpos813 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction809].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos813]) return;
+  if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32530;
-  fra.me.meth = LOCATE_parser___ReduceAction809___init;
+  fra.me.line = 1175;
+  fra.me.meth = LOCATE_parser___ReduceAction8___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32530 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1175 */
+  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[itpos813] = 1;
+  init_table[itpos12] = 1;
   return;
 }
-void parser___ReduceAction810___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+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;
+  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 = 32534;
-  fra.me.meth = LOCATE_parser___ReduceAction810___action;
+  fra.me.line = 1179;
+  fra.me.meth = LOCATE_parser___ReduceAction9___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -86911,124 +5627,106 @@ void parser___ReduceAction810___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1181 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1182 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1183 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32548 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32548);
-    nit_exit(1);
-  }
-  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:32550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32550);
-    nit_exit(1);
-  }
-  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:32552 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32552);
-    nit_exit(1);
-  }
-  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:32554 */
+  /* ./parser//parser.nit:1184 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1185 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1187 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32554);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1187);
   }
-  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:32556 */
+  /* ./parser//parser.nit:1188 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1190 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32556);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1190);
   }
-  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:32558 */
+  /* ./parser//parser.nit:1191 */
+  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:1192 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* ./parser//parser.nit:1195 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32558);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:32564 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32564);
-    nit_exit(1);
+    /* ./parser//parser.nit:1196 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32566 */
+  /* ./parser//parser.nit:1198 */
+  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:1203 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1204 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction9____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32566);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1204);
   }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction9____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32577 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction810___init(val_t p0, int* init_table){
-  int itpos814 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction810].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos814]) return;
+  if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32579;
-  fra.me.meth = LOCATE_parser___ReduceAction810___init;
+  fra.me.line = 1207;
+  fra.me.meth = LOCATE_parser___ReduceAction9___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32579 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1207 */
+  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[itpos814] = 1;
+  init_table[itpos13] = 1;
   return;
 }
-void parser___ReduceAction811___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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;
+  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 = 32583;
-  fra.me.meth = LOCATE_parser___ReduceAction811___action;
+  fra.me.line = 1211;
+  fra.me.meth = LOCATE_parser___ReduceAction10___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87036,115 +5734,109 @@ void parser___ReduceAction811___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1213 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1214 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1215 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32596 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32596);
-    nit_exit(1);
-  }
-  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:32598 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32598);
-    nit_exit(1);
-  }
-  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:32600 */
+  /* ./parser//parser.nit:1216 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1217 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1219 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32600);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1219);
   }
-  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:32602 */
+  /* ./parser//parser.nit:1220 */
+  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:1221 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1223 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32602);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1223);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:32604 */
+  /* ./parser//parser.nit:1224 */
+  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:1225 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* ./parser//parser.nit:1228 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32604);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:32609 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32609);
-    nit_exit(1);
+    /* ./parser//parser.nit:1229 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:32611 */
+  /* ./parser//parser.nit:1231 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1236 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1237 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction10____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32611);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1237);
   }
-  fra.me.REG[2] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction10____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32622 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction811___init(val_t p0, int* init_table){
-  int itpos815 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction811].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos815]) return;
+  if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32624;
-  fra.me.meth = LOCATE_parser___ReduceAction811___init;
+  fra.me.line = 1240;
+  fra.me.meth = LOCATE_parser___ReduceAction10___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32624 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1240 */
+  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[itpos815] = 1;
+  init_table[itpos14] = 1;
   return;
 }
-void parser___ReduceAction812___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32628;
-  fra.me.meth = LOCATE_parser___ReduceAction812___action;
+  fra.me.line = 1244;
+  fra.me.meth = LOCATE_parser___ReduceAction11___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87152,95 +5844,118 @@ void parser___ReduceAction812___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1246 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1247 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1248 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1249 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32639 */
+  /* ./parser//parser.nit:1250 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1251 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1253 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32639);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1253);
   }
-  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:32641 */
+  /* ./parser//parser.nit:1255 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32641);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1255);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32643 */
+  /* ./parser//parser.nit:1256 */
+  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:1257 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1259 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32643);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1259);
   }
-  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:32645 */
+  /* ./parser//parser.nit:1260 */
+  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:1261 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* ./parser//parser.nit:1264 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32645);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32650 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1265 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:1267 */
+  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:1272 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1273 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction11____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32650);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1273);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction11____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32661 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction812___init(val_t p0, int* init_table){
-  int itpos816 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction812].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos816]) return;
+  if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32663;
-  fra.me.meth = LOCATE_parser___ReduceAction812___init;
+  fra.me.line = 1276;
+  fra.me.meth = LOCATE_parser___ReduceAction11___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32663 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1276 */
+  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[itpos816] = 1;
+  init_table[itpos15] = 1;
   return;
 }
-void parser___ReduceAction813___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32667;
-  fra.me.meth = LOCATE_parser___ReduceAction813___action;
+  fra.me.line = 1280;
+  fra.me.meth = LOCATE_parser___ReduceAction12___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87248,95 +5963,110 @@ void parser___ReduceAction813___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1282 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1283 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1284 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32678 */
+  /* ./parser//parser.nit:1285 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1286 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1288 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32678);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1288);
   }
-  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:32680 */
+  /* ./parser//parser.nit:1289 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1291 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32680);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1291);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32682 */
+  /* ./parser//parser.nit:1292 */
+  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:1293 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* ./parser//parser.nit:1296 */
+  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:1297 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32682);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:32684 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32684);
-    nit_exit(1);
+    /* ./parser//parser.nit:1298 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32689 */
+  /* ./parser//parser.nit:1300 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1305 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1306 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction12____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32689);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1306);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction12____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32700 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction813___init(val_t p0, int* init_table){
-  int itpos817 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction813].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos817]) return;
+  if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32702;
-  fra.me.meth = LOCATE_parser___ReduceAction813___init;
+  fra.me.line = 1309;
+  fra.me.meth = LOCATE_parser___ReduceAction12___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32702 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1309 */
+  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[itpos817] = 1;
+  init_table[itpos16] = 1;
   return;
 }
-void parser___ReduceAction814___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32706;
-  fra.me.meth = LOCATE_parser___ReduceAction814___action;
+  fra.me.line = 1313;
+  fra.me.meth = LOCATE_parser___ReduceAction13___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87344,95 +6074,119 @@ void parser___ReduceAction814___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1315 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1316 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1317 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1318 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32717 */
+  /* ./parser//parser.nit:1319 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1320 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1322 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32717);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1322);
   }
-  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:32719 */
+  /* ./parser//parser.nit:1324 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32719);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1324);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32721 */
+  /* ./parser//parser.nit:1325 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1327 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32721);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1327);
   }
-  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:32723 */
+  /* ./parser//parser.nit:1328 */
+  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:1329 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* ./parser//parser.nit:1332 */
+  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:1333 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32723);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32728 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1334 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* ./parser//parser.nit:1336 */
+  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:1341 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1342 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction13____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32728);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1342);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction13____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32739 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction814___init(val_t p0, int* init_table){
-  int itpos818 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction814].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos818]) return;
+  if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32741;
-  fra.me.meth = LOCATE_parser___ReduceAction814___init;
+  fra.me.line = 1345;
+  fra.me.meth = LOCATE_parser___ReduceAction13___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32741 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1345 */
+  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[itpos818] = 1;
+  init_table[itpos17] = 1;
   return;
 }
-void parser___ReduceAction815___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32745;
-  fra.me.meth = LOCATE_parser___ReduceAction815___action;
+  fra.me.line = 1349;
+  fra.me.meth = LOCATE_parser___ReduceAction14___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87440,95 +6194,121 @@ void parser___ReduceAction815___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1351 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1352 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1353 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1354 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32756 */
+  /* ./parser//parser.nit:1355 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1356 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1358 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32756);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1358);
   }
-  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:32758 */
+  /* ./parser//parser.nit:1359 */
+  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:1361 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32758);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1361);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32760 */
+  /* ./parser//parser.nit:1362 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1364 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32760);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1364);
   }
-  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:32762 */
+  /* ./parser//parser.nit:1365 */
+  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:1366 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* ./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:1370 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32762);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32767 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1371 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+  }
+  /* ./parser//parser.nit:1373 */
+  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:1378 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1379 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction14____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32767);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1379);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction14____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32778 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction815___init(val_t p0, int* init_table){
-  int itpos819 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction815].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos819]) return;
+  if (init_table[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32780;
-  fra.me.meth = LOCATE_parser___ReduceAction815___init;
+  fra.me.line = 1382;
+  fra.me.meth = LOCATE_parser___ReduceAction14___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32780 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1382 */
+  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[itpos819] = 1;
+  init_table[itpos18] = 1;
   return;
 }
-void parser___ReduceAction816___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32784;
-  fra.me.meth = LOCATE_parser___ReduceAction816___action;
+  fra.me.line = 1386;
+  fra.me.meth = LOCATE_parser___ReduceAction15___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87536,189 +6316,219 @@ void parser___ReduceAction816___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1388 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1391 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1392 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32795 */
+  /* ./parser//parser.nit:1393 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1394 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1396 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32795);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1396);
   }
-  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:32797 */
+  /* ./parser//parser.nit:1398 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32797);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1398);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32799 */
+  /* ./parser//parser.nit:1399 */
+  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:1401 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32799);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1401);
   }
-  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:32801 */
+  /* ./parser//parser.nit:1402 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1404 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32801);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1404);
   }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32806 */
+  /* ./parser//parser.nit:1405 */
+  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:1406 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* ./parser//parser.nit:1409 */
+  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:1410 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1411 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+  }
+  /* ./parser//parser.nit:1413 */
+  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:1418 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1419 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction15____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32806);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1419);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction15____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32817 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction816___init(val_t p0, int* init_table){
-  int itpos820 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction816].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos820]) return;
+  if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32819;
-  fra.me.meth = LOCATE_parser___ReduceAction816___init;
+  fra.me.line = 1422;
+  fra.me.meth = LOCATE_parser___ReduceAction15___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32819 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1422 */
+  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[itpos820] = 1;
+  init_table[itpos19] = 1;
   return;
 }
-void parser___ReduceAction817___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32823;
-  fra.me.meth = LOCATE_parser___ReduceAction817___action;
+  fra.me.line = 1426;
+  fra.me.meth = LOCATE_parser___ReduceAction16___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1428 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1429 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32834);
-    nit_exit(1);
-  }
-  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:32836 */
+  /* ./parser//parser.nit:1430 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1431 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1433 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32836);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1433);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32838 */
+  /* ./parser//parser.nit:1434 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32838);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:32840 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32840);
-    nit_exit(1);
+    /* ./parser//parser.nit:1435 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32845 */
+  /* ./parser//parser.nit:1437 */
+  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:1442 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:1443 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction16____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32845);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1443);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction16____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32856 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction817___init(val_t p0, int* init_table){
-  int itpos821 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction817].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos821]) return;
+  if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32858;
-  fra.me.meth = LOCATE_parser___ReduceAction817___init;
+  fra.me.line = 1446;
+  fra.me.meth = LOCATE_parser___ReduceAction16___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32858 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1446 */
+  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[itpos821] = 1;
+  init_table[itpos20] = 1;
   return;
 }
-void parser___ReduceAction818___action(val_t p0, val_t p1){
+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;
+  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 = 32862;
-  fra.me.meth = LOCATE_parser___ReduceAction818___action;
+  fra.me.line = 1450;
+  fra.me.meth = LOCATE_parser___ReduceAction17___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -87730,91 +6540,95 @@ void parser___ReduceAction818___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1452 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1453 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1454 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32873 */
+  /* ./parser//parser.nit:1455 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1456 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1458 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32873);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1458);
   }
-  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:32875 */
+  /* ./parser//parser.nit:1460 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32875);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1460);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32877 */
+  /* ./parser//parser.nit:1461 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32877);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:32879 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32879);
-    nit_exit(1);
+    /* ./parser//parser.nit:1462 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32884 */
+  /* ./parser//parser.nit:1464 */
+  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:1469 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1470 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction17____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32884);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1470);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction17____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32895 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction818___init(val_t p0, int* init_table){
-  int itpos822 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction818].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos822]) return;
+  if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32897;
-  fra.me.meth = LOCATE_parser___ReduceAction818___init;
+  fra.me.line = 1473;
+  fra.me.meth = LOCATE_parser___ReduceAction17___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32897 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1473 */
+  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[itpos822] = 1;
+  init_table[itpos21] = 1;
   return;
 }
-void parser___ReduceAction819___action(val_t p0, val_t p1){
+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 = 32901;
-  fra.me.meth = LOCATE_parser___ReduceAction819___action;
+  fra.me.line = 1477;
+  fra.me.meth = LOCATE_parser___ReduceAction18___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -87826,93 +6640,100 @@ void parser___ReduceAction819___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1479 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32912 */
+  /* ./parser//parser.nit:1482 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1483 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1485 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32912);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1485);
   }
-  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:32914 */
+  /* ./parser//parser.nit:1486 */
+  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:1488 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32914);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1488);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32916 */
+  /* ./parser//parser.nit:1489 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32916);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:32918 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32918);
-    nit_exit(1);
+    /* ./parser//parser.nit:1490 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32923 */
+  /* ./parser//parser.nit:1492 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1497 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1498 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction18____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32923);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1498);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction18____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32934 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction819___init(val_t p0, int* init_table){
-  int itpos823 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction819].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos823]) return;
+  if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32936;
-  fra.me.meth = LOCATE_parser___ReduceAction819___init;
+  fra.me.line = 1501;
+  fra.me.meth = LOCATE_parser___ReduceAction18___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32936 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1501 */
+  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[itpos823] = 1;
+  init_table[itpos22] = 1;
   return;
 }
-void parser___ReduceAction820___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 32940;
-  fra.me.meth = LOCATE_parser___ReduceAction820___action;
+  fra.me.line = 1505;
+  fra.me.meth = LOCATE_parser___ReduceAction19___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -87920,93 +6741,109 @@ void parser___ReduceAction820___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1507 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1508 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1509 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1510 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32951 */
+  /* ./parser//parser.nit:1511 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1512 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1514 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32951);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1514);
   }
-  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:32953 */
+  /* ./parser//parser.nit:1516 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32953);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1516);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32955 */
+  /* ./parser//parser.nit:1517 */
+  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:1519 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32955);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1519);
   }
-  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:32957 */
+  /* ./parser//parser.nit:1520 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32957);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:32962 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1521 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1523 */
+  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:1528 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1529 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction19____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32962);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1529);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction19____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:32973 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction820___init(val_t p0, int* init_table){
-  int itpos824 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction820].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos824]) return;
+  if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 32975;
-  fra.me.meth = LOCATE_parser___ReduceAction820___init;
+  fra.me.line = 1532;
+  fra.me.meth = LOCATE_parser___ReduceAction19___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:32975 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1532 */
+  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[itpos824] = 1;
+  init_table[itpos23] = 1;
   return;
 }
-void parser___ReduceAction821___action(val_t p0, val_t p1){
+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;
+  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 = 32979;
-  fra.me.meth = LOCATE_parser___ReduceAction821___action;
+  fra.me.line = 1536;
+  fra.me.meth = LOCATE_parser___ReduceAction20___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -88018,93 +6855,100 @@ void parser___ReduceAction821___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1538 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1540 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:32990 */
+  /* ./parser//parser.nit:1541 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1542 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1544 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32990);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1544);
   }
-  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:32992 */
+  /* ./parser//parser.nit:1546 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32992);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1546);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:32994 */
+  /* ./parser//parser.nit:1547 */
+  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:1548 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32994);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:32996 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 32996);
-    nit_exit(1);
+    /* ./parser//parser.nit:1549 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33001 */
+  /* ./parser//parser.nit:1551 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1556 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1557 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction20____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33001);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1557);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction20____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33012 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction821___init(val_t p0, int* init_table){
-  int itpos825 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction821].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos825]) return;
+  if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33014;
-  fra.me.meth = LOCATE_parser___ReduceAction821___init;
+  fra.me.line = 1560;
+  fra.me.meth = LOCATE_parser___ReduceAction20___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33014 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1560 */
+  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[itpos825] = 1;
+  init_table[itpos24] = 1;
   return;
 }
-void parser___ReduceAction822___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 33018;
-  fra.me.meth = LOCATE_parser___ReduceAction822___action;
+  fra.me.line = 1564;
+  fra.me.meth = LOCATE_parser___ReduceAction21___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88112,95 +6956,111 @@ void parser___ReduceAction822___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1566 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1567 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1568 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1569 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33029 */
+  /* ./parser//parser.nit:1570 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1571 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1573 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33029);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1573);
   }
-  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:33031 */
+  /* ./parser//parser.nit:1575 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33031);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1575);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33033 */
+  /* ./parser//parser.nit:1577 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33033);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1577);
   }
-  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:33035 */
+  /* ./parser//parser.nit:1578 */
+  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:1579 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33035);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33040 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1580 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1582 */
+  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:1587 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1588 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction21____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33040);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1588);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction21____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33051 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction822___init(val_t p0, int* init_table){
-  int itpos826 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction822].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos826]) return;
+  if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33053;
-  fra.me.meth = LOCATE_parser___ReduceAction822___init;
+  fra.me.line = 1591;
+  fra.me.meth = LOCATE_parser___ReduceAction21___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33053 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1591 */
+  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[itpos826] = 1;
+  init_table[itpos25] = 1;
   return;
 }
-void parser___ReduceAction823___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 33057;
-  fra.me.meth = LOCATE_parser___ReduceAction823___action;
+  fra.me.line = 1595;
+  fra.me.meth = LOCATE_parser___ReduceAction22___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88208,95 +7068,114 @@ void parser___ReduceAction823___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1597 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1598 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1599 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1600 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33068 */
+  /* ./parser//parser.nit:1601 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1602 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1604 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33068);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1604);
   }
-  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:33070 */
+  /* ./parser//parser.nit:1605 */
+  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:1607 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33070);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1607);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33072 */
+  /* ./parser//parser.nit:1609 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33072);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1609);
   }
-  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:33074 */
+  /* ./parser//parser.nit:1610 */
+  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:1611 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33074);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33079 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1612 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1614 */
+  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:1619 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1620 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction22____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33079);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1620);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction22____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33090 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction823___init(val_t p0, int* init_table){
-  int itpos827 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction823].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos827]) return;
+  if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33092;
-  fra.me.meth = LOCATE_parser___ReduceAction823___init;
+  fra.me.line = 1623;
+  fra.me.meth = LOCATE_parser___ReduceAction22___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33092 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1623 */
+  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[itpos827] = 1;
+  init_table[itpos26] = 1;
   return;
 }
-void parser___ReduceAction824___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33096;
-  fra.me.meth = LOCATE_parser___ReduceAction824___action;
+  fra.me.line = 1627;
+  fra.me.meth = LOCATE_parser___ReduceAction23___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88305,104 +7184,122 @@ void parser___ReduceAction824___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1629 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1630 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1632 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1633 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33108 */
+  /* ./parser//parser.nit:1634 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1635 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1637 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33108);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1637);
   }
-  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:33110 */
+  /* ./parser//parser.nit:1639 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33110);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1639);
   }
-  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:33112 */
+  /* ./parser//parser.nit:1640 */
+  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:1642 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33112);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1642);
   }
-  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:33114 */
+  /* ./parser//parser.nit:1644 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33114);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1644);
   }
-  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:33116 */
+  /* ./parser//parser.nit:1645 */
+  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:1646 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33116);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33122 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1647 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1649 */
+  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:1654 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1655 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction23____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33122);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1655);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction23____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33133 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction824___init(val_t p0, int* init_table){
-  int itpos828 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction824].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos828]) return;
+  if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33135;
-  fra.me.meth = LOCATE_parser___ReduceAction824___init;
+  fra.me.line = 1658;
+  fra.me.meth = LOCATE_parser___ReduceAction23___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33135 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1658 */
+  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[itpos828] = 1;
+  init_table[itpos27] = 1;
   return;
 }
-void parser___ReduceAction825___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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 = 33139;
-  fra.me.meth = LOCATE_parser___ReduceAction825___action;
+  fra.me.line = 1662;
+  fra.me.meth = LOCATE_parser___ReduceAction24___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88410,95 +7307,125 @@ void parser___ReduceAction825___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1664 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1665 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1666 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33150 */
+  /* ./parser//parser.nit:1667 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1668 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1669 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1671 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33150);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1671);
   }
-  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:33152 */
+  /* ./parser//parser.nit:1672 */
+  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:1673 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* ./parser//parser.nit:1677 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33152);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1677);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33154 */
+  /* ./parser//parser.nit:1678 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33154);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:33156 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1679 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  }
+  /* ./parser//parser.nit:1681 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33156);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33161 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1682 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1684 */
+  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:1689 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:1690 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction24____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33161);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1690);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction24____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33172 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction825___init(val_t p0, int* init_table){
-  int itpos829 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction825].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos829]) return;
+  if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33174;
-  fra.me.meth = LOCATE_parser___ReduceAction825___init;
+  fra.me.line = 1693;
+  fra.me.meth = LOCATE_parser___ReduceAction24___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33174 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1693 */
+  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[itpos829] = 1;
+  init_table[itpos28] = 1;
   return;
 }
-void parser___ReduceAction826___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33178;
-  fra.me.meth = LOCATE_parser___ReduceAction826___action;
+  fra.me.line = 1697;
+  fra.me.meth = LOCATE_parser___ReduceAction25___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88507,104 +7434,133 @@ void parser___ReduceAction826___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1699 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1700 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1701 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1702 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33190 */
+  /* ./parser//parser.nit:1703 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1704 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1706 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33190);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1706);
   }
-  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:33192 */
+  /* ./parser//parser.nit:1707 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1709 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33192);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1709);
   }
-  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:33194 */
+  /* ./parser//parser.nit:1710 */
+  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:1711 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* ./parser//parser.nit:1715 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33194);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1715);
   }
-  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:33196 */
+  /* ./parser//parser.nit:1716 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33196);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
-  /* ./parser//parser.nit:33198 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1717 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* ./parser//parser.nit:1719 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33198);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33204 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1720 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1722 */
+  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:1727 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1728 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction25____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33204);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1728);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction25____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33215 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction826___init(val_t p0, int* init_table){
-  int itpos830 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction826].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos830]) return;
+  if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33217;
-  fra.me.meth = LOCATE_parser___ReduceAction826___init;
+  fra.me.line = 1731;
+  fra.me.meth = LOCATE_parser___ReduceAction25___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33217 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1731 */
+  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[itpos830] = 1;
+  init_table[itpos29] = 1;
   return;
 }
-void parser___ReduceAction827___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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;
+  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 = 33221;
-  fra.me.meth = LOCATE_parser___ReduceAction827___action;
+  fra.me.line = 1735;
+  fra.me.meth = LOCATE_parser___ReduceAction26___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88613,114 +7569,135 @@ void parser___ReduceAction827___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1737 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1739 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1740 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33234 */
+  /* ./parser//parser.nit:1741 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1742 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1744 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33234);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1744);
   }
-  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:33236 */
+  /* ./parser//parser.nit:1745 */
+  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:1746 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1748 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33236);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1748);
   }
-  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:33238 */
+  /* ./parser//parser.nit:1749 */
+  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:1750 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* ./parser//parser.nit:1754 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33238);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1754);
   }
-  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:33240 */
+  /* ./parser//parser.nit:1755 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33240);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  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:33242 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33242);
-    nit_exit(1);
+    /* ./parser//parser.nit:1756 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  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:33244 */
+  /* ./parser//parser.nit:1758 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33244);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33251 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1759 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1761 */
+  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:1766 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1767 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction26____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33251);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1767);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction26____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33262 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction827___init(val_t p0, int* init_table){
-  int itpos831 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction827].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos831]) return;
+  if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33264;
-  fra.me.meth = LOCATE_parser___ReduceAction827___init;
+  fra.me.line = 1770;
+  fra.me.meth = LOCATE_parser___ReduceAction26___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33264 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1770 */
+  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[itpos831] = 1;
+  init_table[itpos30] = 1;
   return;
 }
-void parser___ReduceAction828___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33268;
-  fra.me.meth = LOCATE_parser___ReduceAction828___action;
+  fra.me.line = 1774;
+  fra.me.meth = LOCATE_parser___ReduceAction27___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88729,104 +7706,144 @@ void parser___ReduceAction828___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1776 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1777 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1778 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1779 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1780 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33280 */
+  /* ./parser//parser.nit:1781 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1782 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1784 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33280);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1784);
   }
-  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:33282 */
+  /* ./parser//parser.nit:1786 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1786);
+  }
+  /* ./parser//parser.nit:1787 */
+  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:1788 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1790 */
+  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, 1790);
+  }
+  /* ./parser//parser.nit:1791 */
+  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:1792 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* ./parser//parser.nit:1796 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33282);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1796);
+  }
+  /* ./parser//parser.nit:1797 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
-  /* ./parser//parser.nit:33284 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33284);
-    nit_exit(1);
+    /* ./parser//parser.nit:1798 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33286 */
+  /* ./parser//parser.nit:1800 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33286);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:33288 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33288);
-    nit_exit(1);
+    /* ./parser//parser.nit:1801 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33293 */
+  /* ./parser//parser.nit:1803 */
+  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:1808 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1809 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction27____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33293);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1809);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction27____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33304 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction828___init(val_t p0, int* init_table){
-  int itpos832 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction828].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos832]) return;
+  if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33306;
-  fra.me.meth = LOCATE_parser___ReduceAction828___init;
+  fra.me.line = 1812;
+  fra.me.meth = LOCATE_parser___ReduceAction27___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33306 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1812 */
+  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[itpos832] = 1;
+  init_table[itpos31] = 1;
   return;
 }
-void parser___ReduceAction829___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33310;
-  fra.me.meth = LOCATE_parser___ReduceAction829___action;
+  fra.me.line = 1816;
+  fra.me.meth = LOCATE_parser___ReduceAction28___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88835,104 +7852,136 @@ void parser___ReduceAction829___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1818 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1819 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1820 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1821 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33322 */
+  /* ./parser//parser.nit:1822 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1823 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1825 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33322);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1825);
   }
-  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:33324 */
+  /* ./parser//parser.nit:1826 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1828 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33324);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1828);
   }
-  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:33326 */
+  /* ./parser//parser.nit:1829 */
+  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:1830 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* ./parser//parser.nit:1834 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33326);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1834);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33328 */
+  /* ./parser//parser.nit:1835 */
+  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:1836 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33328);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:33330 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1837 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* ./parser//parser.nit:1839 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33330);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33335 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1840 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1842 */
+  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* ./parser//parser.nit:1847 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:1848 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction28____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33335);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1848);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction28____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33346 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction829___init(val_t p0, int* init_table){
-  int itpos833 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction829].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos833]) return;
+  if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33348;
-  fra.me.meth = LOCATE_parser___ReduceAction829___init;
+  fra.me.line = 1851;
+  fra.me.meth = LOCATE_parser___ReduceAction28___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33348 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1851 */
+  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[itpos833] = 1;
+  init_table[itpos32] = 1;
   return;
 }
-void parser___ReduceAction830___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33352;
-  fra.me.meth = LOCATE_parser___ReduceAction830___action;
+  fra.me.line = 1855;
+  fra.me.meth = LOCATE_parser___ReduceAction29___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -88941,104 +7990,145 @@ void parser___ReduceAction830___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1857 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1858 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1859 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1860 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1861 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33364 */
+  /* ./parser//parser.nit:1862 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1863 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1865 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33364);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1865);
   }
-  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:33366 */
+  /* ./parser//parser.nit:1867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33366);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1867);
   }
-  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:33368 */
+  /* ./parser//parser.nit:1868 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1870 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33368);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1870);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33370 */
+  /* ./parser//parser.nit:1871 */
+  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:1872 */
+  fra.me.REG[9] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
+  /* ./parser//parser.nit:1876 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33370);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1876);
   }
-  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:33372 */
+  /* ./parser//parser.nit:1877 */
+  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:1878 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1879 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+  }
+  /* ./parser//parser.nit:1881 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33372);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33377 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1882 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1884 */
+  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:1889 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1890 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction29____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33377);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1890);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction29____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33388 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction830___init(val_t p0, int* init_table){
-  int itpos834 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction830].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos834]) return;
+  if (init_table[itpos33]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33390;
-  fra.me.meth = LOCATE_parser___ReduceAction830___init;
+  fra.me.line = 1893;
+  fra.me.meth = LOCATE_parser___ReduceAction29___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33390 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1893 */
+  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[itpos834] = 1;
+  init_table[itpos33] = 1;
   return;
 }
-void parser___ReduceAction831___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33394;
-  fra.me.meth = LOCATE_parser___ReduceAction831___action;
+  fra.me.line = 1897;
+  fra.me.meth = LOCATE_parser___ReduceAction30___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -89047,104 +8137,147 @@ void parser___ReduceAction831___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1899 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1900 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1901 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1902 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1903 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33406 */
+  /* ./parser//parser.nit:1904 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1905 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1907 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33406);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1907);
   }
-  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:33408 */
+  /* ./parser//parser.nit:1908 */
+  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:1910 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33408);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1910);
   }
-  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:33410 */
+  /* ./parser//parser.nit:1911 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1913 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33410);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1913);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33412 */
+  /* ./parser//parser.nit:1914 */
+  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:1915 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* ./parser//parser.nit:1919 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33412);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1919);
   }
-  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:33414 */
+  /* ./parser//parser.nit:1920 */
+  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:1921 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33414);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33419 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1922 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
+  }
+  /* ./parser//parser.nit:1924 */
+  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));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1925 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1927 */
+  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
+  /* ./parser//parser.nit:1932 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:1933 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction30____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33419);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1933);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction30____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33430 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction831___init(val_t p0, int* init_table){
-  int itpos835 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction831].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos835]) return;
+  if (init_table[itpos34]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33432;
-  fra.me.meth = LOCATE_parser___ReduceAction831___init;
+  fra.me.line = 1936;
+  fra.me.meth = LOCATE_parser___ReduceAction30___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33432 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1936 */
+  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[itpos835] = 1;
+  init_table[itpos34] = 1;
   return;
 }
-void parser___ReduceAction832___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  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 = 33436;
-  fra.me.meth = LOCATE_parser___ReduceAction832___action;
+  fra.me.line = 1940;
+  fra.me.meth = LOCATE_parser___ReduceAction31___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -89153,210 +8286,243 @@ void parser___ReduceAction832___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1942 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1943 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1944 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1945 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1946 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1947 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33448 */
+  /* ./parser//parser.nit:1948 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1949 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1951 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33448);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1951);
   }
-  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:33450 */
+  /* ./parser//parser.nit:1953 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33450);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1953);
   }
-  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:33452 */
+  /* ./parser//parser.nit:1954 */
+  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:1956 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33452);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1956);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33454 */
+  /* ./parser//parser.nit:1957 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:1959 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33454);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1959);
   }
-  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:33456 */
+  /* ./parser//parser.nit:1960 */
+  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:1961 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* ./parser//parser.nit:1965 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33456);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1965);
   }
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33461 */
+  /* ./parser//parser.nit:1966 */
+  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:1967 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33461);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1968 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
+  }
+  /* ./parser//parser.nit:1970 */
+  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));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:1971 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:1973 */
+  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:1978 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* ./parser//parser.nit:1979 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction31____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1979);
+  }
+  REGB0 = ATTR_parser___ReduceAction31____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33472 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction832___init(val_t p0, int* init_table){
-  int itpos836 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction832].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos836]) return;
+  if (init_table[itpos35]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33474;
-  fra.me.meth = LOCATE_parser___ReduceAction832___init;
+  fra.me.line = 1982;
+  fra.me.meth = LOCATE_parser___ReduceAction31___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33474 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:1982 */
+  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[itpos836] = 1;
+  init_table[itpos35] = 1;
   return;
 }
-void parser___ReduceAction833___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 33478;
-  fra.me.meth = LOCATE_parser___ReduceAction833___action;
+  fra.me.line = 1986;
+  fra.me.meth = LOCATE_parser___ReduceAction32___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1988 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:1989 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1990 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1991 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1992 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:1993 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33490 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33490);
-    nit_exit(1);
-  }
-  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:33492 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33492);
-    nit_exit(1);
-  }
-  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:33494 */
+  /* ./parser//parser.nit:1995 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33494);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1995);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33496 */
+  /* ./parser//parser.nit:1997 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmodule, ID_TKwmodule)) /*cast nullable TKwmodule*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33496);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1997);
   }
-  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:33498 */
+  /* ./parser//parser.nit:1999 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33498);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1999);
   }
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33503 */
+  /* ./parser//parser.nit:2000 */
+  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:2005 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2006 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction32____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33503);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2006);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction32____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33514 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction833___init(val_t p0, int* init_table){
-  int itpos837 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction833].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos837]) return;
+  if (init_table[itpos36]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33516;
-  fra.me.meth = LOCATE_parser___ReduceAction833___init;
+  fra.me.line = 2009;
+  fra.me.meth = LOCATE_parser___ReduceAction32___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33516 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2009 */
+  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[itpos837] = 1;
+  init_table[itpos36] = 1;
   return;
 }
-void parser___ReduceAction834___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 33520;
-  fra.me.meth = LOCATE_parser___ReduceAction834___action;
+  fra.me.line = 2013;
+  fra.me.meth = LOCATE_parser___ReduceAction33___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -89364,105 +8530,90 @@ void parser___ReduceAction834___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2015 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2016 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2017 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2019 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2020 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2021 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33532);
-    nit_exit(1);
-  }
-  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:33534 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33534);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:2023 */
   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:33536 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33536);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2023);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33538 */
+  /* ./parser//parser.nit:2025 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33538);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2025);
   }
-  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:33540 */
+  /* ./parser//parser.nit:2027 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33540);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2027);
   }
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33545 */
+  /* ./parser//parser.nit:2028 */
+  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:2033 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2034 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction33____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33545);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2034);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction33____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33556 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction834___init(val_t p0, int* init_table){
-  int itpos838 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction834].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos838]) return;
+  if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33558;
-  fra.me.meth = LOCATE_parser___ReduceAction834___init;
+  fra.me.line = 2037;
+  fra.me.meth = LOCATE_parser___ReduceAction33___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33558 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2037 */
+  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[itpos838] = 1;
+  init_table[itpos37] = 1;
   return;
 }
-void parser___ReduceAction835___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 33562;
-  fra.me.meth = LOCATE_parser___ReduceAction835___action;
+  fra.me.line = 2041;
+  fra.me.meth = LOCATE_parser___ReduceAction34___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -89470,423 +8621,305 @@ void parser___ReduceAction835___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2043 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2044 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2045 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2046 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2047 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2048 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2049 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33574 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33574);
-    nit_exit(1);
-  }
-  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:33576 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33576);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:2051 */
   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:33578 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33578);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2051);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33580 */
+  /* ./parser//parser.nit:2053 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33580);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2053);
   }
-  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:33582 */
+  /* ./parser//parser.nit:2055 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwend, ID_TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33582);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2055);
   }
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33587 */
+  /* ./parser//parser.nit:2056 */
+  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:2061 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2062 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction34____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33587);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2062);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction34____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33598 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction835___init(val_t p0, int* init_table){
-  int itpos839 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction835].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos839]) return;
+  if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33600;
-  fra.me.meth = LOCATE_parser___ReduceAction835___init;
+  fra.me.line = 2065;
+  fra.me.meth = LOCATE_parser___ReduceAction34___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33600 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2065 */
+  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[itpos839] = 1;
+  init_table[itpos38] = 1;
   return;
 }
-void parser___ReduceAction836___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} 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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33604;
-  fra.me.meth = LOCATE_parser___ReduceAction836___action;
+  fra.me.line = 2069;
+  fra.me.meth = LOCATE_parser___ReduceAction35___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2071 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33616);
-    nit_exit(1);
-  }
-  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:33618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33618);
-    nit_exit(1);
-  }
-  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:33620 */
+  /* ./parser//parser.nit:2073 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2075 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33620);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2075);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33622 */
+  /* ./parser//parser.nit:2076 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33622);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:33624 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33624);
-    nit_exit(1);
+    /* ./parser//parser.nit:2077 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33629 */
+  /* ./parser//parser.nit:2079 */
+  fra.me.REG[4] = NEW_AMainClassdef_parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
+  /* ./parser//parser.nit:2082 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:2083 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction35____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33629);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2083);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction35____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33640 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction836___init(val_t p0, int* init_table){
-  int itpos840 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction836].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos840]) return;
+  if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33642;
-  fra.me.meth = LOCATE_parser___ReduceAction836___init;
+  fra.me.line = 2086;
+  fra.me.meth = LOCATE_parser___ReduceAction35___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33642 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2086 */
+  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[itpos840] = 1;
+  init_table[itpos39] = 1;
   return;
 }
-void parser___ReduceAction837___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 33646;
-  fra.me.meth = LOCATE_parser___ReduceAction837___action;
+  fra.me.line = 2090;
+  fra.me.meth = LOCATE_parser___ReduceAction36___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33658 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33658);
-    nit_exit(1);
-  }
-  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:33660 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33660);
-    nit_exit(1);
-  }
-  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:33662 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33662);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33664 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33664);
-    nit_exit(1);
-  }
-  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:33666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33666);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33671 */
+  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:2092 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2093 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2094 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2095 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction36____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33671);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2095);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction36____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33682 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction837___init(val_t p0, int* init_table){
-  int itpos841 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction837].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos841]) return;
+  if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33684;
-  fra.me.meth = LOCATE_parser___ReduceAction837___init;
+  fra.me.line = 2098;
+  fra.me.meth = LOCATE_parser___ReduceAction36___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33684 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2098 */
+  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[itpos841] = 1;
+  init_table[itpos40] = 1;
   return;
 }
-void parser___ReduceAction838___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 33688;
-  fra.me.meth = LOCATE_parser___ReduceAction838___action;
+  fra.me.line = 2102;
+  fra.me.meth = LOCATE_parser___ReduceAction37___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2104 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2105 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2106 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33700);
-    nit_exit(1);
-  }
-  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:33702 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33702);
-    nit_exit(1);
-  }
-  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:33704 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33704);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33706 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33706);
-    nit_exit(1);
-  }
-  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:33708 */
+  /* ./parser//parser.nit:2108 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33708);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2108);
   }
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33713 */
+  /* ./parser//parser.nit:2109 */
+  fra.me.REG[3] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:2113 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2114 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction37____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33713);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2114);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction37____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33724 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction838___init(val_t p0, int* init_table){
-  int itpos842 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction838].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos842]) return;
+  if (init_table[itpos41]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33726;
-  fra.me.meth = LOCATE_parser___ReduceAction838___init;
+  fra.me.line = 2117;
+  fra.me.meth = LOCATE_parser___ReduceAction37___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33726 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2117 */
+  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[itpos842] = 1;
+  init_table[itpos41] = 1;
   return;
 }
-void parser___ReduceAction839___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction39___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 = 33730;
-  fra.me.meth = LOCATE_parser___ReduceAction839___action;
+  fra.me.line = 2121;
+  fra.me.meth = LOCATE_parser___ReduceAction39___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -89895,104 +8928,106 @@ void parser___ReduceAction839___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2123 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2124 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2125 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2126 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2127 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2128 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2129 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2130 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33742);
-    nit_exit(1);
-  }
-  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:33744 */
+  /* ./parser//parser.nit:2131 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2132 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2133 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2135 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33744);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2135);
   }
+  /* ./parser//parser.nit:2137 */
   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:33746 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33746);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2137);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33748 */
+  /* ./parser//parser.nit:2139 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33748);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2139);
   }
-  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:33750 */
+  /* ./parser//parser.nit:2141 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33750);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2141);
   }
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33755 */
+  /* ./parser//parser.nit:2142 */
+  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:2152 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* ./parser//parser.nit:2153 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction39____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33755);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2153);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction39____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33766 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction839___init(val_t p0, int* init_table){
-  int itpos843 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction839].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos843]) return;
+  if (init_table[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33768;
-  fra.me.meth = LOCATE_parser___ReduceAction839___init;
+  fra.me.line = 2156;
+  fra.me.meth = LOCATE_parser___ReduceAction39___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33768 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2156 */
+  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[itpos843] = 1;
+  init_table[itpos42] = 1;
   return;
 }
-void parser___ReduceAction840___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction40___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 = 33772;
-  fra.me.meth = LOCATE_parser___ReduceAction840___action;
+  fra.me.line = 2160;
+  fra.me.meth = LOCATE_parser___ReduceAction40___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90002,113 +9037,114 @@ void parser___ReduceAction840___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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2162 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2163 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2164 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2165 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2166 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2167 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2168 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2169 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2170 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33785 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33785);
-    nit_exit(1);
-  }
-  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:33787 */
+  /* ./parser//parser.nit:2171 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2172 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2173 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2175 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33787);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2175);
   }
-  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:33789 */
+  /* ./parser//parser.nit:2177 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33789);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2177);
   }
-  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:33791 */
+  /* ./parser//parser.nit:2179 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33791);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2179);
   }
-  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:33793 */
+  /* ./parser//parser.nit:2181 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33793);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2181);
   }
-  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:33795 */
+  /* ./parser//parser.nit:2183 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33795);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2183);
   }
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33801 */
+  /* ./parser//parser.nit:2184 */
+  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:2194 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2195 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction40____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33801);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2195);
   }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction40____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33812 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction840___init(val_t p0, int* init_table){
-  int itpos844 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction840].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos844]) return;
+  if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33814;
-  fra.me.meth = LOCATE_parser___ReduceAction840___init;
+  fra.me.line = 2198;
+  fra.me.meth = LOCATE_parser___ReduceAction40___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33814 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2198 */
+  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[itpos844] = 1;
+  init_table[itpos43] = 1;
   return;
 }
-void parser___ReduceAction841___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction41___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 = 33818;
-  fra.me.meth = LOCATE_parser___ReduceAction841___action;
+  fra.me.line = 2202;
+  fra.me.meth = LOCATE_parser___ReduceAction41___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90117,104 +9153,118 @@ void parser___ReduceAction841___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2204 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2205 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2206 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2207 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2208 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2209 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2210 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2211 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2212 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2213 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2214 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2215 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2217 */
   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:33830 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33830);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2217);
   }
-  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:33832 */
+  /* ./parser//parser.nit:2219 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33832);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2219);
   }
-  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:33834 */
+  /* ./parser//parser.nit:2221 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33834);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2221);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
-  /* ./parser//parser.nit:33836 */
+  /* ./parser//parser.nit:2223 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33836);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2223);
   }
-  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:33838 */
+  /* ./parser//parser.nit:2225 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33838);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2225);
   }
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33843 */
+  /* ./parser//parser.nit:2226 */
+  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:2227 */
+  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:2237 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2238 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction41____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33843);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2238);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction41____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33854 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction841___init(val_t p0, int* init_table){
-  int itpos845 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction841].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos845]) return;
+  if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33856;
-  fra.me.meth = LOCATE_parser___ReduceAction841___init;
+  fra.me.line = 2241;
+  fra.me.meth = LOCATE_parser___ReduceAction41___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33856 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2241 */
+  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[itpos845] = 1;
+  init_table[itpos44] = 1;
   return;
 }
-void parser___ReduceAction842___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction42___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 = 33860;
-  fra.me.meth = LOCATE_parser___ReduceAction842___action;
+  fra.me.line = 2245;
+  fra.me.meth = LOCATE_parser___ReduceAction42___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90224,113 +9274,126 @@ void parser___ReduceAction842___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[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2247 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2248 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2249 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2250 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2251 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2252 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2253 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2254 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2255 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2256 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2257 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2258 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2259 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2261 */
   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:33873 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33873);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2261);
   }
+  /* ./parser//parser.nit:2263 */
   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:33875 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33875);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2263);
   }
+  /* ./parser//parser.nit:2265 */
   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:33877 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33877);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2265);
   }
-  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:33879 */
+  /* ./parser//parser.nit:2267 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33879);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2267);
   }
-  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:33881 */
+  /* ./parser//parser.nit:2269 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33881);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2269);
   }
-  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:33883 */
+  /* ./parser//parser.nit:2271 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33883);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2271);
   }
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33889 */
+  /* ./parser//parser.nit:2272 */
+  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:2273 */
+  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:2283 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2284 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction42____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33889);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2284);
   }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction42____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33900 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction842___init(val_t p0, int* init_table){
-  int itpos846 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction842].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos846]) return;
+  if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33902;
-  fra.me.meth = LOCATE_parser___ReduceAction842___init;
+  fra.me.line = 2287;
+  fra.me.meth = LOCATE_parser___ReduceAction42___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33902 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2287 */
+  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[itpos846] = 1;
+  init_table[itpos45] = 1;
   return;
 }
-void parser___ReduceAction843___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction43___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 = 33906;
-  fra.me.meth = LOCATE_parser___ReduceAction843___action;
+  fra.me.line = 2291;
+  fra.me.meth = LOCATE_parser___ReduceAction43___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90341,122 +9404,116 @@ void parser___ReduceAction843___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2293 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2294 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2295 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2296 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2298 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2299 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2300 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2301 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33920 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33920);
-    nit_exit(1);
-  }
-  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:33922 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33922);
-    nit_exit(1);
-  }
-  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:33924 */
+  /* ./parser//parser.nit:2302 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2303 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2304 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2306 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33924);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2306);
   }
-  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:33926 */
+  /* ./parser//parser.nit:2308 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33926);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2308);
   }
-  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:33928 */
+  /* ./parser//parser.nit:2310 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33928);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2310);
   }
-  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:33930 */
+  /* ./parser//parser.nit:2312 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33930);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2312);
   }
-  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:33932 */
+  /* ./parser//parser.nit:2314 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33932);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2314);
   }
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
-  /* ./parser//parser.nit:33939 */
+  /* ./parser//parser.nit:2315 */
+  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:2316 */
+  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:2326 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2327 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction43____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33939);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2327);
   }
-  fra.me.REG[2] = 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[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction43____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33950 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction843___init(val_t p0, int* init_table){
-  int itpos847 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction843].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos847]) return;
+  if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33952;
-  fra.me.meth = LOCATE_parser___ReduceAction843___init;
+  fra.me.line = 2330;
+  fra.me.meth = LOCATE_parser___ReduceAction43___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33952 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2330 */
+  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[itpos847] = 1;
+  init_table[itpos46] = 1;
   return;
 }
-void parser___ReduceAction844___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction44___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 = 33956;
-  fra.me.meth = LOCATE_parser___ReduceAction844___action;
+  fra.me.line = 2334;
+  fra.me.meth = LOCATE_parser___ReduceAction44___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90465,104 +9522,127 @@ void parser___ReduceAction844___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2336 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2337 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2338 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2339 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2340 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2341 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2342 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2343 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2344 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:33968 */
+  /* ./parser//parser.nit:2345 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2346 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2347 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2348 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2350 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33968);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2350);
   }
+  /* ./parser//parser.nit:2352 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2352);
+  }
+  /* ./parser//parser.nit:2354 */
   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:33970 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33970);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2354);
   }
-  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:33972 */
+  /* ./parser//parser.nit:2356 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33972);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2356);
   }
-  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:33974 */
+  /* ./parser//parser.nit:2358 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33974);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2358);
   }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:33979 */
+  /* ./parser//parser.nit:2360 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33979);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2360);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:33981 */
+  /* ./parser//parser.nit:2361 */
+  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:2362 */
+  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:2372 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2373 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction44____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 33981);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2373);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction44____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:33992 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction844___init(val_t p0, int* init_table){
-  int itpos848 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction844].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos848]) return;
+  if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 33994;
-  fra.me.meth = LOCATE_parser___ReduceAction844___init;
+  fra.me.line = 2376;
+  fra.me.meth = LOCATE_parser___ReduceAction44___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:33994 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2376 */
+  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[itpos848] = 1;
+  init_table[itpos47] = 1;
   return;
 }
-void parser___ReduceAction845___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction45___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 = 33998;
-  fra.me.meth = LOCATE_parser___ReduceAction845___action;
+  fra.me.line = 2380;
+  fra.me.meth = LOCATE_parser___ReduceAction45___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90571,104 +9651,130 @@ void parser___ReduceAction845___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2382 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2383 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2384 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2385 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2386 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2387 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2388 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2389 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2390 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34010 */
+  /* ./parser//parser.nit:2391 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2392 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2393 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2394 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2396 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34010);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2396);
   }
-  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:34012 */
+  /* ./parser//parser.nit:2398 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34012);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2398);
   }
-  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:34014 */
+  /* ./parser//parser.nit:2400 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34014);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2400);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:34016 */
+  /* ./parser//parser.nit:2402 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34016);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2402);
   }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:34021 */
+  /* ./parser//parser.nit:2404 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34021);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2404);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34023 */
+  /* ./parser//parser.nit:2405 */
+  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:2407 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34023);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2407);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2408 */
+  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:2409 */
+  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:2419 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2420 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction45____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2420);
+  }
+  REGB0 = ATTR_parser___ReduceAction45____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34034 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction845___init(val_t p0, int* init_table){
-  int itpos849 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction845].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos849]) return;
+  if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34036;
-  fra.me.meth = LOCATE_parser___ReduceAction845___init;
+  fra.me.line = 2423;
+  fra.me.meth = LOCATE_parser___ReduceAction45___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34036 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2423 */
+  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[itpos849] = 1;
+  init_table[itpos48] = 1;
   return;
 }
-void parser___ReduceAction846___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction46___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 = 34040;
-  fra.me.meth = LOCATE_parser___ReduceAction846___action;
+  fra.me.line = 2427;
+  fra.me.meth = LOCATE_parser___ReduceAction46___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 13;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90677,104 +9783,139 @@ void parser___ReduceAction846___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[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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2429 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2430 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2431 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2432 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2433 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2434 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2435 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2436 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2437 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34052 */
+  /* ./parser//parser.nit:2438 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2439 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2440 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2441 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2442 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2444 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34052);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2444);
   }
-  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:34054 */
+  /* ./parser//parser.nit:2446 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34054);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2446);
   }
-  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:34056 */
+  /* ./parser//parser.nit:2448 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34056);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2448);
   }
-  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:34058 */
+  /* ./parser//parser.nit:2450 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34058);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2450);
   }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:34063 */
+  /* ./parser//parser.nit:2452 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34063);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2452);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34065 */
+  /* ./parser//parser.nit:2454 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34065);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2454);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2455 */
+  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:2457 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2457);
+  }
+  /* ./parser//parser.nit:2458 */
+  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:2459 */
+  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:2469 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2470 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction46____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2470);
+  }
+  REGB0 = ATTR_parser___ReduceAction46____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34076 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction846___init(val_t p0, int* init_table){
-  int itpos850 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction846].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos850]) return;
+  if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34078;
-  fra.me.meth = LOCATE_parser___ReduceAction846___init;
+  fra.me.line = 2473;
+  fra.me.meth = LOCATE_parser___ReduceAction46___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34078 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2473 */
+  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[itpos850] = 1;
+  init_table[itpos49] = 1;
   return;
 }
-void parser___ReduceAction847___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction47___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 = 34082;
-  fra.me.meth = LOCATE_parser___ReduceAction847___action;
+  fra.me.line = 2477;
+  fra.me.meth = LOCATE_parser___ReduceAction47___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90783,104 +9924,118 @@ void parser___ReduceAction847___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2479 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2481 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2482 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2483 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2484 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2485 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2486 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2487 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2488 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2489 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2490 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2492 */
   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:34094 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34094);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2492);
   }
+  /* ./parser//parser.nit:2494 */
   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:34096 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34096);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2494);
   }
-  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:34098 */
+  /* ./parser//parser.nit:2496 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34098);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2496);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:34100 */
+  /* ./parser//parser.nit:2498 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34100);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2498);
   }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:34105 */
+  /* ./parser//parser.nit:2500 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34105);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2500);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34107 */
+  /* ./parser//parser.nit:2501 */
+  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:2502 */
+  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:2512 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* ./parser//parser.nit:2513 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction47____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34107);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2513);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction47____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34118 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction847___init(val_t p0, int* init_table){
-  int itpos851 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction847].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos851]) return;
+  if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34120;
-  fra.me.meth = LOCATE_parser___ReduceAction847___init;
+  fra.me.line = 2516;
+  fra.me.meth = LOCATE_parser___ReduceAction47___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34120 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2516 */
+  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[itpos851] = 1;
+  init_table[itpos50] = 1;
   return;
 }
-void parser___ReduceAction848___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction48___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 = 34124;
-  fra.me.meth = LOCATE_parser___ReduceAction848___action;
+  fra.me.line = 2520;
+  fra.me.meth = LOCATE_parser___ReduceAction48___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90889,104 +10044,127 @@ void parser___ReduceAction848___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2522 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2523 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2524 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2525 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2526 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2527 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2528 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2529 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2530 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34136 */
+  /* ./parser//parser.nit:2531 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2532 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2533 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2534 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2536 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2536);
+  }
+  /* ./parser//parser.nit:2538 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34136);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2538);
   }
+  /* ./parser//parser.nit:2540 */
   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:34138 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34138);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2540);
   }
-  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:34140 */
+  /* ./parser//parser.nit:2542 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34140);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2542);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:34142 */
+  /* ./parser//parser.nit:2544 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34142);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2544);
   }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:34147 */
+  /* ./parser//parser.nit:2546 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34147);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2546);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34149 */
+  /* ./parser//parser.nit:2547 */
+  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:2548 */
+  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:2558 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2559 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction48____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34149);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2559);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction48____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34160 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction848___init(val_t p0, int* init_table){
-  int itpos852 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction848].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos852]) return;
+  if (init_table[itpos51]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34162;
-  fra.me.meth = LOCATE_parser___ReduceAction848___init;
+  fra.me.line = 2562;
+  fra.me.meth = LOCATE_parser___ReduceAction48___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34162 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2562 */
+  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[itpos852] = 1;
+  init_table[itpos51] = 1;
   return;
 }
-void parser___ReduceAction849___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction49___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 = 34166;
-  fra.me.meth = LOCATE_parser___ReduceAction849___action;
+  fra.me.line = 2566;
+  fra.me.meth = LOCATE_parser___ReduceAction49___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -90995,104 +10173,130 @@ void parser___ReduceAction849___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2568 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2569 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2570 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2571 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2572 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2573 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2574 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2575 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2576 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34178 */
+  /* ./parser//parser.nit:2577 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2578 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2579 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2580 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2582 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34178);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2582);
   }
-  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:34180 */
+  /* ./parser//parser.nit:2584 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34180);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2584);
   }
-  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:34182 */
+  /* ./parser//parser.nit:2586 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2586);
+  }
+  /* ./parser//parser.nit:2588 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34182);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2588);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:34184 */
+  /* ./parser//parser.nit:2590 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34184);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2590);
   }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:34189 */
+  /* ./parser//parser.nit:2591 */
+  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:2593 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34189);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2593);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34191 */
+  /* ./parser//parser.nit:2594 */
+  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:2595 */
+  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:2605 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2606 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction49____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34191);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2606);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction49____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34202 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction849___init(val_t p0, int* init_table){
-  int itpos853 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction849].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos853]) return;
+  if (init_table[itpos52]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34204;
-  fra.me.meth = LOCATE_parser___ReduceAction849___init;
+  fra.me.line = 2609;
+  fra.me.meth = LOCATE_parser___ReduceAction49___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34204 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2609 */
+  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[itpos853] = 1;
+  init_table[itpos52] = 1;
   return;
 }
-void parser___ReduceAction850___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction50___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 = 34208;
-  fra.me.meth = LOCATE_parser___ReduceAction850___action;
+  fra.me.line = 2613;
+  fra.me.meth = LOCATE_parser___ReduceAction50___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 13;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -91101,104 +10305,139 @@ void parser___ReduceAction850___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[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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2615 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2617 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2618 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2619 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2621 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2622 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2623 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34220 */
+  /* ./parser//parser.nit:2624 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2625 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2626 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2627 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2628 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2630 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34220);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2630);
   }
-  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:34222 */
+  /* ./parser//parser.nit:2632 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34222);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2632);
   }
-  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:34224 */
+  /* ./parser//parser.nit:2634 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34224);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2634);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:34226 */
+  /* ./parser//parser.nit:2636 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34226);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2636);
   }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:34231 */
+  /* ./parser//parser.nit:2638 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34231);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2638);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34233 */
+  /* ./parser//parser.nit:2640 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34233);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2640);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2641 */
+  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:2643 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2643);
+  }
+  /* ./parser//parser.nit:2644 */
+  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:2645 */
+  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:2655 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2656 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction50____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2656);
+  }
+  REGB0 = ATTR_parser___ReduceAction50____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34244 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction850___init(val_t p0, int* init_table){
-  int itpos854 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction850].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos854]) return;
+  if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34246;
-  fra.me.meth = LOCATE_parser___ReduceAction850___init;
+  fra.me.line = 2659;
+  fra.me.meth = LOCATE_parser___ReduceAction50___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34246 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2659 */
+  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[itpos854] = 1;
+  init_table[itpos53] = 1;
   return;
 }
-void parser___ReduceAction851___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction51___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 = 34250;
-  fra.me.meth = LOCATE_parser___ReduceAction851___action;
+  fra.me.line = 2663;
+  fra.me.meth = LOCATE_parser___ReduceAction51___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -91207,104 +10446,130 @@ void parser___ReduceAction851___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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2665 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2666 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2667 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2668 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2669 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2670 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2671 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2672 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2673 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34262 */
+  /* ./parser//parser.nit:2674 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2675 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2676 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2677 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2679 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34262);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2679);
   }
-  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:34264 */
+  /* ./parser//parser.nit:2681 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34264);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2681);
   }
-  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:34266 */
+  /* ./parser//parser.nit:2683 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34266);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2683);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:34268 */
+  /* ./parser//parser.nit:2685 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34268);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2685);
   }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:34273 */
+  /* ./parser//parser.nit:2687 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34273);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2687);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34275 */
+  /* ./parser//parser.nit:2688 */
+  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:2690 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34275);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2690);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2691 */
+  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:2692 */
+  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:2702 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* ./parser//parser.nit:2703 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction51____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2703);
+  }
+  REGB0 = ATTR_parser___ReduceAction51____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34286 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction851___init(val_t p0, int* init_table){
-  int itpos855 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction851].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos855]) return;
+  if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34288;
-  fra.me.meth = LOCATE_parser___ReduceAction851___init;
+  fra.me.line = 2706;
+  fra.me.meth = LOCATE_parser___ReduceAction51___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34288 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2706 */
+  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[itpos855] = 1;
+  init_table[itpos54] = 1;
   return;
 }
-void parser___ReduceAction852___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction52___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 = 34292;
-  fra.me.meth = LOCATE_parser___ReduceAction852___action;
+  fra.me.line = 2710;
+  fra.me.meth = LOCATE_parser___ReduceAction52___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 13;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -91313,104 +10578,139 @@ void parser___ReduceAction852___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[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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2712 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2714 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2715 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2716 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2717 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2718 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2719 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2720 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34304 */
+  /* ./parser//parser.nit:2721 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2722 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2723 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2724 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2725 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2727 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34304);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2727);
   }
-  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:34306 */
+  /* ./parser//parser.nit:2729 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34306);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2729);
   }
-  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:34308 */
+  /* ./parser//parser.nit:2731 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2731);
+  }
+  /* ./parser//parser.nit:2733 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34308);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2733);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:34310 */
+  /* ./parser//parser.nit:2735 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34310);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2735);
   }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:34315 */
+  /* ./parser//parser.nit:2737 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34315);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2737);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34317 */
+  /* ./parser//parser.nit:2738 */
+  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:2740 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34317);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2740);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2741 */
+  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:2742 */
+  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:2752 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2753 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction52____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2753);
+  }
+  REGB0 = ATTR_parser___ReduceAction52____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34328 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction852___init(val_t p0, int* init_table){
-  int itpos856 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction852].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos856]) return;
+  if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34330;
-  fra.me.meth = LOCATE_parser___ReduceAction852___init;
+  fra.me.line = 2756;
+  fra.me.meth = LOCATE_parser___ReduceAction52___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34330 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2756 */
+  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[itpos856] = 1;
+  init_table[itpos55] = 1;
   return;
 }
-void parser___ReduceAction853___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 34334;
-  fra.me.meth = LOCATE_parser___ReduceAction853___action;
+  fra.me.line = 2760;
+  fra.me.meth = LOCATE_parser___ReduceAction53___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 13;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -91419,104 +10719,142 @@ void parser___ReduceAction853___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[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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2762 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2763 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2764 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2765 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:2768 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2769 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34346 */
+  /* ./parser//parser.nit:2770 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:2773 */
+  fra.me.REG[10] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2774 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2775 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2777 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34346);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2777);
   }
-  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:34348 */
+  /* ./parser//parser.nit:2779 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34348);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2779);
   }
-  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:34350 */
+  /* ./parser//parser.nit:2781 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34350);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2781);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:34352 */
+  /* ./parser//parser.nit:2783 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34352);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2783);
   }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:34357 */
+  /* ./parser//parser.nit:2785 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34357);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2785);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34359 */
+  /* ./parser//parser.nit:2786 */
+  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:2788 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34359);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2788);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2789 */
+  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:2791 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2791);
+  }
+  /* ./parser//parser.nit:2792 */
+  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:2793 */
+  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:2803 */
+  fra.me.REG[2] = fra.me.REG[12];
+  /* ./parser//parser.nit:2804 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction53____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2804);
+  }
+  REGB0 = ATTR_parser___ReduceAction53____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34370 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction853___init(val_t p0, int* init_table){
-  int itpos857 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction853].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos857]) return;
+  if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34372;
-  fra.me.meth = LOCATE_parser___ReduceAction853___init;
+  fra.me.line = 2807;
+  fra.me.meth = LOCATE_parser___ReduceAction53___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34372 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2807 */
+  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[itpos857] = 1;
+  init_table[itpos56] = 1;
   return;
 }
-void parser___ReduceAction854___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction54___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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34376;
-  fra.me.meth = LOCATE_parser___ReduceAction854___action;
+  fra.me.line = 2811;
+  fra.me.meth = LOCATE_parser___ReduceAction54___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 14;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -91525,1484 +10863,1034 @@ void parser___ReduceAction854___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[9] = NIT_NULL;
+  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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2813 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2814 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2815 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2816 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2818 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2819 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2820 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34388 */
+  /* ./parser//parser.nit:2821 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2822 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2823 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2824 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2825 */
+  fra.me.REG[11] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2826 */
+  fra.me.REG[12] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2827 */
+  fra.me.REG[13] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2829 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34388);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2829);
   }
-  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:34390 */
+  /* ./parser//parser.nit:2831 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34390);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2831);
   }
-  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:34392 */
+  /* ./parser//parser.nit:2833 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34392);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2833);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:34394 */
+  /* ./parser//parser.nit:2835 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34394);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2835);
   }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:34399 */
+  /* ./parser//parser.nit:2837 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34399);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2837);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34401 */
+  /* ./parser//parser.nit:2839 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34401);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2839);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:2840 */
+  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:2842 */
+  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, 2842);
+  }
+  /* ./parser//parser.nit:2843 */
+  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:2845 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2845);
+  }
+  /* ./parser//parser.nit:2846 */
+  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:2847 */
+  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:2857 */
+  fra.me.REG[2] = fra.me.REG[13];
+  /* ./parser//parser.nit:2858 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction54____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2858);
+  }
+  REGB0 = ATTR_parser___ReduceAction54____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34412 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction854___init(val_t p0, int* init_table){
-  int itpos858 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction854].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos858]) return;
+  if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34414;
-  fra.me.meth = LOCATE_parser___ReduceAction854___init;
+  fra.me.line = 2861;
+  fra.me.meth = LOCATE_parser___ReduceAction54___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34414 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2861 */
+  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[itpos858] = 1;
+  init_table[itpos57] = 1;
   return;
 }
-void parser___ReduceAction855___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 34418;
-  fra.me.meth = LOCATE_parser___ReduceAction855___action;
+  fra.me.line = 2865;
+  fra.me.meth = LOCATE_parser___ReduceAction55___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2867 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2868 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34430 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34430);
-    nit_exit(1);
-  }
-  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:34432 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34432);
-    nit_exit(1);
-  }
-  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:34434 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34434);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:34436 */
+  /* ./parser//parser.nit:2870 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34436);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2870);
   }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:34441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34441);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34443 */
+  /* ./parser//parser.nit:2871 */
+  fra.me.REG[3] = NEW_AConcreteClasskind_parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
+  /* ./parser//parser.nit:2874 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2875 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction55____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34443);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2875);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction55____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34454 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction855___init(val_t p0, int* init_table){
-  int itpos859 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction855].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos859]) return;
+  if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34456;
-  fra.me.meth = LOCATE_parser___ReduceAction855___init;
+  fra.me.line = 2878;
+  fra.me.meth = LOCATE_parser___ReduceAction55___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34456 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2878 */
+  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[itpos859] = 1;
+  init_table[itpos58] = 1;
   return;
 }
-void parser___ReduceAction856___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 34460;
-  fra.me.meth = LOCATE_parser___ReduceAction856___action;
+  fra.me.line = 2882;
+  fra.me.meth = LOCATE_parser___ReduceAction56___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2884 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2885 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2886 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34473);
-    nit_exit(1);
-  }
-  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:34475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34475);
-    nit_exit(1);
-  }
-  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:34477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34477);
-    nit_exit(1);
-  }
-  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:34479 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34479);
-    nit_exit(1);
-  }
-  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:34481 */
+  /* ./parser//parser.nit:2888 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwabstract, ID_TKwabstract)) /*cast nullable TKwabstract*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34481);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2888);
   }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:34487 */
+  /* ./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*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34487);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2890);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34489 */
+  /* ./parser//parser.nit:2891 */
+  fra.me.REG[3] = NEW_AAbstractClasskind_parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:2895 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2896 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction56____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34489);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2896);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction56____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34500 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction856___init(val_t p0, int* init_table){
-  int itpos860 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction856].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos860]) return;
+  if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34502;
-  fra.me.meth = LOCATE_parser___ReduceAction856___init;
+  fra.me.line = 2899;
+  fra.me.meth = LOCATE_parser___ReduceAction56___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34502 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2899 */
+  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[itpos860] = 1;
+  init_table[itpos59] = 1;
   return;
 }
-void parser___ReduceAction857___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 34506;
-  fra.me.meth = LOCATE_parser___ReduceAction857___action;
+  fra.me.line = 2903;
+  fra.me.meth = LOCATE_parser___ReduceAction57___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2905 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2906 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34518 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34518);
-    nit_exit(1);
-  }
-  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:34520 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34520);
-    nit_exit(1);
-  }
-  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:34522 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34522);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:34524 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34524);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
-  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:34529 */
+  /* ./parser//parser.nit:2908 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinterface, ID_TKwinterface)) /*cast nullable TKwinterface*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34529);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2908);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34531 */
+  /* ./parser//parser.nit:2909 */
+  fra.me.REG[3] = NEW_AInterfaceClasskind_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
+  /* ./parser//parser.nit:2912 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2913 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction57____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34531);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2913);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction57____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34542 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction857___init(val_t p0, int* init_table){
-  int itpos861 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction857].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos861]) return;
+  if (init_table[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34544;
-  fra.me.meth = LOCATE_parser___ReduceAction857___init;
+  fra.me.line = 2916;
+  fra.me.meth = LOCATE_parser___ReduceAction57___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34544 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2916 */
+  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[itpos861] = 1;
+  init_table[itpos60] = 1;
   return;
 }
-void parser___ReduceAction858___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 34548;
-  fra.me.meth = LOCATE_parser___ReduceAction858___action;
+  fra.me.line = 2920;
+  fra.me.meth = LOCATE_parser___ReduceAction58___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34561 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34561);
-    nit_exit(1);
-  }
-  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:34563 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34563);
-    nit_exit(1);
-  }
-  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:34565 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34565);
-    nit_exit(1);
-  }
-  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:34567 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34567);
-    nit_exit(1);
-  }
-  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:34569 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34569);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
-  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:34575 */
+  /* ./parser//parser.nit:2922 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2923 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2925 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwuniversal, ID_TKwuniversal)) /*cast nullable TKwuniversal*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34575);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2925);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34577 */
+  /* ./parser//parser.nit:2926 */
+  fra.me.REG[3] = NEW_AUniversalClasskind_parser_prod___AUniversalClasskind___init_auniversalclasskind(fra.me.REG[3]);
+  /* ./parser//parser.nit:2929 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2930 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction58____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34577);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2930);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction58____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34588 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction858___init(val_t p0, int* init_table){
-  int itpos862 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction858].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos862]) return;
+  if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34590;
-  fra.me.meth = LOCATE_parser___ReduceAction858___init;
+  fra.me.line = 2933;
+  fra.me.meth = LOCATE_parser___ReduceAction58___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34590 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2933 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos862] = 1;
+  init_table[itpos61] = 1;
   return;
 }
-void parser___ReduceAction859___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction59___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 = 34594;
-  fra.me.meth = LOCATE_parser___ReduceAction859___action;
+  fra.me.line = 2937;
+  fra.me.meth = LOCATE_parser___ReduceAction59___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2939 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2940 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2942 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2943 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34608);
-    nit_exit(1);
-  }
-  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:34610 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34610);
-    nit_exit(1);
-  }
-  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:34612 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34612);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:34614 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34614);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:34616 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34616);
-    nit_exit(1);
-  }
-  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:34618 */
+  /* ./parser//parser.nit:2944 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2945 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2947 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34618);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
-  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:34625 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34625);
-    nit_exit(1);
+    /* ./parser//parser.nit:2948 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34627 */
+  /* ./parser//parser.nit:2950 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:2951 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction59____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34627);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2951);
   }
-  fra.me.REG[2] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction59____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34638 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction859___init(val_t p0, int* init_table){
-  int itpos863 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction859].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos863]) return;
+  if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34640;
-  fra.me.meth = LOCATE_parser___ReduceAction859___init;
+  fra.me.line = 2954;
+  fra.me.meth = LOCATE_parser___ReduceAction59___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34640 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2954 */
+  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[itpos863] = 1;
+  init_table[itpos62] = 1;
   return;
 }
-void parser___ReduceAction860___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction60___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 = 34644;
-  fra.me.meth = LOCATE_parser___ReduceAction860___action;
+  fra.me.line = 2958;
+  fra.me.meth = LOCATE_parser___ReduceAction60___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2960 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2961 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2962 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2963 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2964 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2965 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34657 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34657);
-    nit_exit(1);
-  }
-  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:34659 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34659);
-    nit_exit(1);
-  }
-  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:34661 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34661);
-    nit_exit(1);
-  }
-  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:34663 */
+  /* ./parser//parser.nit:2966 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2967 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:2970 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34663);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2970);
   }
-  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:34665 */
+  /* ./parser//parser.nit:2971 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34665);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[4] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[4]);
-  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:34670 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34670);
-    nit_exit(1);
+    /* ./parser//parser.nit:2972 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34672 */
+  /* ./parser//parser.nit:2974 */
+  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:2975 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:2976 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction60____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34672);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2976);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction60____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34683 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction860___init(val_t p0, int* init_table){
-  int itpos864 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction860].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos864]) return;
+  if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34685;
-  fra.me.meth = LOCATE_parser___ReduceAction860___init;
+  fra.me.line = 2979;
+  fra.me.meth = LOCATE_parser___ReduceAction60___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34685 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2979 */
+  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[itpos864] = 1;
+  init_table[itpos63] = 1;
   return;
 }
-void parser___ReduceAction861___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction61___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 = 34689;
-  fra.me.meth = LOCATE_parser___ReduceAction861___action;
+  fra.me.line = 2983;
+  fra.me.meth = LOCATE_parser___ReduceAction61___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2985 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2986 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2987 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34702 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34702);
-    nit_exit(1);
-  }
-  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:34704 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34704);
-    nit_exit(1);
-  }
-  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:34706 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34706);
-    nit_exit(1);
-  }
-  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:34708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34708);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
-  /* ./parser//parser.nit:34710 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34710);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[4]);
-  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:34715 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34715);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34717 */
+  /* ./parser//parser.nit:2988 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2990 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2991 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction61____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34717);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2991);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction61____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34728 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction861___init(val_t p0, int* init_table){
-  int itpos865 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction861].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos865]) return;
+  if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34730;
-  fra.me.meth = LOCATE_parser___ReduceAction861___init;
+  fra.me.line = 2994;
+  fra.me.meth = LOCATE_parser___ReduceAction61___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34730 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:2994 */
+  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[itpos865] = 1;
+  init_table[itpos64] = 1;
   return;
 }
-void parser___ReduceAction862___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction62___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 = 34734;
-  fra.me.meth = LOCATE_parser___ReduceAction862___action;
+  fra.me.line = 2998;
+  fra.me.meth = LOCATE_parser___ReduceAction62___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3000 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3001 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34747 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34747);
-    nit_exit(1);
-  }
-  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:34749 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34749);
-    nit_exit(1);
-  }
-  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:34751 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34751);
-    nit_exit(1);
-  }
-  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:34753 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34753);
-    nit_exit(1);
-  }
-  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:34755 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34755);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[4]);
-  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:34760 */
+  /* ./parser//parser.nit:3003 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34760);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3003);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34762 */
+  /* ./parser//parser.nit:3004 */
+  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3008 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3009 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction62____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34762);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3009);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction62____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34773 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction862___init(val_t p0, int* init_table){
-  int itpos866 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction862].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos866]) return;
+  if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34775;
-  fra.me.meth = LOCATE_parser___ReduceAction862___init;
+  fra.me.line = 3012;
+  fra.me.meth = LOCATE_parser___ReduceAction62___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34775 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3012 */
+  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[itpos866] = 1;
+  init_table[itpos65] = 1;
   return;
 }
-void parser___ReduceAction863___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction63___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 = 34779;
-  fra.me.meth = LOCATE_parser___ReduceAction863___action;
+  fra.me.line = 3016;
+  fra.me.meth = LOCATE_parser___ReduceAction63___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3018 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3019 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3020 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34792 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34792);
-    nit_exit(1);
-  }
-  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:34794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34794);
-    nit_exit(1);
-  }
-  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:34796 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34796);
-    nit_exit(1);
-  }
-  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:34798 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34798);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
-  /* ./parser//parser.nit:34800 */
+  /* ./parser//parser.nit:3022 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34800);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3022);
   }
-  fra.me.REG[4] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[4]);
-  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:34805 */
+  /* ./parser//parser.nit:3024 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34805);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3024);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34807 */
+  /* ./parser//parser.nit:3025 */
+  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3029 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3030 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction63____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34807);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3030);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction63____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34818 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction863___init(val_t p0, int* init_table){
-  int itpos867 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction863].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos867]) return;
+  if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34820;
-  fra.me.meth = LOCATE_parser___ReduceAction863___init;
+  fra.me.line = 3033;
+  fra.me.meth = LOCATE_parser___ReduceAction63___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34820 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3033 */
+  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[itpos867] = 1;
+  init_table[itpos66] = 1;
   return;
 }
-void parser___ReduceAction864___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction64___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 = 34824;
-  fra.me.meth = LOCATE_parser___ReduceAction864___action;
+  fra.me.line = 3037;
+  fra.me.meth = LOCATE_parser___ReduceAction64___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3039 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3040 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3041 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3042 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3043 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34837 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34837);
-    nit_exit(1);
-  }
-  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:34839 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34839);
-    nit_exit(1);
-  }
-  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:34841 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34841);
-    nit_exit(1);
-  }
-  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:34843 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34843);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
-  /* ./parser//parser.nit:34845 */
+  /* ./parser//parser.nit:3045 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwspecial, ID_TKwspecial)) /*cast nullable TKwspecial*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34845);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3045);
   }
-  fra.me.REG[4] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[4]);
-  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:34850 */
+  /* ./parser//parser.nit:3047 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34850);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3047);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34852 */
+  /* ./parser//parser.nit:3048 */
+  fra.me.REG[3] = NEW_ASuperclass_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:3054 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction64____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34852);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3054);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction64____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34863 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction864___init(val_t p0, int* init_table){
-  int itpos868 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction864].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos868]) return;
+  if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34865;
-  fra.me.meth = LOCATE_parser___ReduceAction864___init;
+  fra.me.line = 3057;
+  fra.me.meth = LOCATE_parser___ReduceAction64___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34865 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3057 */
+  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[itpos868] = 1;
+  init_table[itpos67] = 1;
   return;
 }
-void parser___ReduceAction865___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 34869;
-  fra.me.meth = LOCATE_parser___ReduceAction865___action;
+  fra.me.line = 3061;
+  fra.me.meth = LOCATE_parser___ReduceAction65___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3063 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3065 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3066 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3067 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34882 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34882);
-    nit_exit(1);
-  }
-  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:34884 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34884);
-    nit_exit(1);
-  }
-  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:34886 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34886);
-    nit_exit(1);
-  }
-  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:34888 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34888);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
-  /* ./parser//parser.nit:34890 */
+  /* ./parser//parser.nit:3069 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34890);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3069);
   }
-  fra.me.REG[4] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[4]);
-  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:34895 */
+  /* ./parser//parser.nit:3071 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34895);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3071);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34897 */
+  /* ./parser//parser.nit:3072 */
+  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3077 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3078 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction65____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34897);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3078);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction65____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34908 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction865___init(val_t p0, int* init_table){
-  int itpos869 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction865].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos869]) return;
+  if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34910;
-  fra.me.meth = LOCATE_parser___ReduceAction865___init;
+  fra.me.line = 3081;
+  fra.me.meth = LOCATE_parser___ReduceAction65___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34910 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3081 */
+  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[itpos869] = 1;
+  init_table[itpos68] = 1;
   return;
 }
-void parser___ReduceAction866___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction66___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 = 34914;
-  fra.me.meth = LOCATE_parser___ReduceAction866___action;
+  fra.me.line = 3085;
+  fra.me.meth = LOCATE_parser___ReduceAction66___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3087 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3088 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3089 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:34927 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34927);
-    nit_exit(1);
-  }
-  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:34929 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34929);
-    nit_exit(1);
-  }
-  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:34931 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34931);
-    nit_exit(1);
-  }
-  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:34933 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34933);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
-  /* ./parser//parser.nit:34935 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34935);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[4]);
-  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:34940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34940);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34942 */
+  /* ./parser//parser.nit:3091 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3092 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction66____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34942);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3092);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction66____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34953 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction866___init(val_t p0, int* init_table){
-  int itpos870 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction866].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos870]) return;
+  if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 34955;
-  fra.me.meth = LOCATE_parser___ReduceAction866___init;
+  fra.me.line = 3095;
+  fra.me.meth = LOCATE_parser___ReduceAction66___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:34955 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3095 */
+  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[itpos870] = 1;
+  init_table[itpos69] = 1;
   return;
 }
-void parser___ReduceAction867___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[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 = 34959;
-  fra.me.meth = LOCATE_parser___ReduceAction867___action;
+  fra.me.line = 3099;
+  fra.me.meth = LOCATE_parser___ReduceAction67___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -93016,111 +11904,108 @@ void parser___ReduceAction867___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3101 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3103 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3104 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3105 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3106 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3107 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3108 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3110 */
   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:34972 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34972);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3110);
   }
-  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:34974 */
+  /* ./parser//parser.nit:3112 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34974);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3112);
   }
-  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:34976 */
+  /* ./parser//parser.nit:3114 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34976);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3114);
   }
-  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:34978 */
+  /* ./parser//parser.nit:3116 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34978);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3116);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
-  /* ./parser//parser.nit:34980 */
+  /* ./parser//parser.nit:3118 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34980);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3118);
   }
-  fra.me.REG[4] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[4]);
-  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:34985 */
+  /* ./parser//parser.nit:3120 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34985);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3120);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:34987 */
+  /* ./parser//parser.nit:3121 */
+  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:3130 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3131 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction67____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 34987);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3131);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction67____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:34998 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction867___init(val_t p0, int* init_table){
-  int itpos871 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction867].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos871]) return;
+  if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35000;
-  fra.me.meth = LOCATE_parser___ReduceAction867___init;
+  fra.me.line = 3134;
+  fra.me.meth = LOCATE_parser___ReduceAction67___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35000 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3134 */
+  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[itpos871] = 1;
+  init_table[itpos70] = 1;
   return;
 }
-void parser___ReduceAction868___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction68___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 = 35004;
-  fra.me.meth = LOCATE_parser___ReduceAction868___action;
+  fra.me.line = 3138;
+  fra.me.meth = LOCATE_parser___ReduceAction68___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -93130,111 +12015,117 @@ void parser___ReduceAction868___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3140 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3141 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3142 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3143 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3144 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3145 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3146 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3147 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35017 */
+  /* ./parser//parser.nit:3148 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3150 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35017);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3150);
   }
-  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:35019 */
+  /* ./parser//parser.nit:3152 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35019);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3152);
   }
-  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:35021 */
+  /* ./parser//parser.nit:3154 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35021);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3154);
   }
-  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:35023 */
+  /* ./parser//parser.nit:3156 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35023);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3156);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
-  /* ./parser//parser.nit:35025 */
+  /* ./parser//parser.nit:3158 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35025);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3158);
   }
-  fra.me.REG[4] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[4]);
-  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:35030 */
+  /* ./parser//parser.nit:3160 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35030);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3160);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35032 */
+  /* ./parser//parser.nit:3162 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35032);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3162);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  /* ./parser//parser.nit:3163 */
+  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:3172 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3173 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction68____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3173);
+  }
+  REGB0 = ATTR_parser___ReduceAction68____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35043 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction868___init(val_t p0, int* init_table){
-  int itpos872 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction868].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos872]) return;
+  if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35045;
-  fra.me.meth = LOCATE_parser___ReduceAction868___init;
+  fra.me.line = 3176;
+  fra.me.meth = LOCATE_parser___ReduceAction68___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35045 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3176 */
+  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[itpos872] = 1;
+  init_table[itpos71] = 1;
   return;
 }
-void parser___ReduceAction869___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[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 = 35049;
-  fra.me.meth = LOCATE_parser___ReduceAction869___action;
+  fra.me.line = 3180;
+  fra.me.meth = LOCATE_parser___ReduceAction69___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -93248,111 +12139,110 @@ void parser___ReduceAction869___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3182 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3183 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3184 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3185 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3186 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3187 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3188 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3189 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3190 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3192 */
   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:35062 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35062);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
   }
-  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:35064 */
+  /* ./parser//parser.nit:3194 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35064);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3194);
   }
-  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:35066 */
+  /* ./parser//parser.nit:3196 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35066);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3196);
   }
-  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:35068 */
+  /* ./parser//parser.nit:3198 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35068);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3198);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
-  /* ./parser//parser.nit:35070 */
+  /* ./parser//parser.nit:3200 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35070);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3200);
   }
-  fra.me.REG[4] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[4]);
-  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:35075 */
+  /* ./parser//parser.nit:3202 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35075);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3202);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35077 */
+  /* ./parser//parser.nit:3203 */
+  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:3212 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3213 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction69____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35077);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3213);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction69____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35088 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction869___init(val_t p0, int* init_table){
-  int itpos873 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction869].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos873]) return;
+  if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35090;
-  fra.me.meth = LOCATE_parser___ReduceAction869___init;
+  fra.me.line = 3216;
+  fra.me.meth = LOCATE_parser___ReduceAction69___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35090 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3216 */
+  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[itpos873] = 1;
+  init_table[itpos72] = 1;
   return;
 }
-void parser___ReduceAction870___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction70___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 = 35094;
-  fra.me.meth = LOCATE_parser___ReduceAction870___action;
+  fra.me.line = 3220;
+  fra.me.meth = LOCATE_parser___ReduceAction70___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -93362,111 +12252,119 @@ void parser___ReduceAction870___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3222 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3223 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3224 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3225 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3227 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3228 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3229 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3230 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35107 */
+  /* ./parser//parser.nit:3231 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3233 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35107);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3233);
   }
-  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:35109 */
+  /* ./parser//parser.nit:3235 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35109);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3235);
   }
-  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:35111 */
+  /* ./parser//parser.nit:3237 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35111);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3237);
   }
-  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:35113 */
+  /* ./parser//parser.nit:3239 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35113);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3239);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
-  /* ./parser//parser.nit:35115 */
+  /* ./parser//parser.nit:3241 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35115);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3241);
   }
-  fra.me.REG[4] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[4]);
-  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:35120 */
+  /* ./parser//parser.nit:3243 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3243);
+  }
+  /* ./parser//parser.nit:3245 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35120);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3245);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35122 */
+  /* ./parser//parser.nit:3246 */
+  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:3255 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3256 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction70____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35122);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3256);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction70____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35133 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction870___init(val_t p0, int* init_table){
-  int itpos874 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction870].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos874]) return;
+  if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35135;
-  fra.me.meth = LOCATE_parser___ReduceAction870___init;
+  fra.me.line = 3259;
+  fra.me.meth = LOCATE_parser___ReduceAction70___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35135 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3259 */
+  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[itpos874] = 1;
+  init_table[itpos73] = 1;
   return;
 }
-void parser___ReduceAction871___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[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 = 35139;
-  fra.me.meth = LOCATE_parser___ReduceAction871___action;
+  fra.me.line = 3263;
+  fra.me.meth = LOCATE_parser___ReduceAction71___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -93480,109 +12378,108 @@ void parser___ReduceAction871___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3265 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3266 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3267 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3268 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3269 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3270 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3271 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3272 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3273 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3275 */
   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:35152 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35152);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3275);
   }
-  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:35154 */
+  /* ./parser//parser.nit:3277 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35154);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3277);
   }
-  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:35156 */
+  /* ./parser//parser.nit:3279 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35156);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3279);
   }
-  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:35158 */
+  /* ./parser//parser.nit:3281 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35158);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3281);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
-  /* ./parser//parser.nit:35160 */
+  /* ./parser//parser.nit:3283 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35160);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3283);
   }
-  fra.me.REG[4] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[4]);
-  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:35165 */
+  /* ./parser//parser.nit:3285 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35165);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3285);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35167 */
+  /* ./parser//parser.nit:3286 */
+  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:3295 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3296 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction71____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35167);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3296);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction71____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35178 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction871___init(val_t p0, int* init_table){
-  int itpos875 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction871].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos875]) return;
+  if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35180;
-  fra.me.meth = LOCATE_parser___ReduceAction871___init;
+  fra.me.line = 3299;
+  fra.me.meth = LOCATE_parser___ReduceAction71___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35180 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3299 */
+  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[itpos875] = 1;
+  init_table[itpos74] = 1;
   return;
 }
-void parser___ReduceAction872___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[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 = 35184;
-  fra.me.meth = LOCATE_parser___ReduceAction872___action;
+  fra.me.line = 3303;
+  fra.me.meth = LOCATE_parser___ReduceAction72___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -93597,120 +12494,118 @@ void parser___ReduceAction872___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3305 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3306 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3307 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3308 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3309 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3310 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3311 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3312 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3313 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3314 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3316 */
   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:35198 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35198);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3316);
   }
+  /* ./parser//parser.nit:3318 */
   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:35200 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35200);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3318);
   }
+  /* ./parser//parser.nit:3320 */
   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:35202 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35202);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3320);
   }
+  /* ./parser//parser.nit:3322 */
   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:35204 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35204);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3322);
   }
-  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:35206 */
+  /* ./parser//parser.nit:3324 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35206);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3324);
   }
-  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:35208 */
+  /* ./parser//parser.nit:3326 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35208);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3326);
   }
-  fra.me.REG[4] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[5], fra.me.REG[4]);
-  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:35214 */
+  /* ./parser//parser.nit:3328 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35214);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3328);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35216 */
+  /* ./parser//parser.nit:3329 */
+  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:3338 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3339 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction72____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35216);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3339);
   }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction72____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35227 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction872___init(val_t p0, int* init_table){
-  int itpos876 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction872].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos876]) return;
+  if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35229;
-  fra.me.meth = LOCATE_parser___ReduceAction872___init;
+  fra.me.line = 3342;
+  fra.me.meth = LOCATE_parser___ReduceAction72___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35229 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3342 */
+  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[itpos876] = 1;
+  init_table[itpos75] = 1;
   return;
 }
-void parser___ReduceAction873___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction73___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 = 35233;
-  fra.me.meth = LOCATE_parser___ReduceAction873___action;
+  fra.me.line = 3346;
+  fra.me.meth = LOCATE_parser___ReduceAction73___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -93719,114 +12614,104 @@ void parser___ReduceAction873___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3348 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3349 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3350 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3351 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3352 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3353 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3354 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3355 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35246);
-    nit_exit(1);
-  }
-  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:35248 */
+  /* ./parser//parser.nit:3357 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35248);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3357);
   }
+  /* ./parser//parser.nit:3359 */
   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:35250 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35250);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3359);
   }
+  /* ./parser//parser.nit:3361 */
   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:35252 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35252);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3361);
   }
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
-  /* ./parser//parser.nit:35254 */
+  /* ./parser//parser.nit:3363 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35254);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3363);
   }
-  fra.me.REG[4] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[4]);
+  /* ./parser//parser.nit:3365 */
   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:35259 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35259);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3365);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35261 */
+  /* ./parser//parser.nit:3366 */
+  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:3374 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3375 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction73____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35261);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3375);
   }
-  fra.me.REG[2] = 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], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction73____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35272 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction873___init(val_t p0, int* init_table){
-  int itpos877 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction873].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos877]) return;
+  if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35274;
-  fra.me.meth = LOCATE_parser___ReduceAction873___init;
+  fra.me.line = 3378;
+  fra.me.meth = LOCATE_parser___ReduceAction73___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35274 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3378 */
+  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[itpos877] = 1;
+  init_table[itpos76] = 1;
   return;
 }
-void parser___ReduceAction874___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction74___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 = 35278;
-  fra.me.meth = LOCATE_parser___ReduceAction874___action;
+  fra.me.line = 3382;
+  fra.me.meth = LOCATE_parser___ReduceAction74___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -93836,123 +12721,112 @@ void parser___ReduceAction874___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3384 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3385 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3386 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3388 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3389 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3390 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3391 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3392 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35292 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35292);
-    nit_exit(1);
-  }
-  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:35294 */
+  /* ./parser//parser.nit:3394 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35294);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3394);
   }
-  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:35296 */
+  /* ./parser//parser.nit:3396 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35296);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3396);
   }
-  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:35298 */
+  /* ./parser//parser.nit:3398 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35298);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3398);
   }
-  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:35300 */
+  /* ./parser//parser.nit:3400 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35300);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3400);
   }
-  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:35302 */
+  /* ./parser//parser.nit:3402 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35302);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3402);
   }
-  fra.me.REG[4] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[5], fra.me.REG[4]);
+  /* ./parser//parser.nit:3404 */
   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:35308 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35308);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3404);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35310 */
+  /* ./parser//parser.nit:3405 */
+  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:3413 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3414 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction74____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35310);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3414);
   }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction74____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35321 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction874___init(val_t p0, int* init_table){
-  int itpos878 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction874].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos878]) return;
+  if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35323;
-  fra.me.meth = LOCATE_parser___ReduceAction874___init;
+  fra.me.line = 3417;
+  fra.me.meth = LOCATE_parser___ReduceAction74___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35323 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3417 */
+  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[itpos878] = 1;
+  init_table[itpos77] = 1;
   return;
 }
-void parser___ReduceAction875___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+void parser___ReduceAction75___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 = 35327;
-  fra.me.meth = LOCATE_parser___ReduceAction875___action;
+  fra.me.line = 3421;
+  fra.me.meth = LOCATE_parser___ReduceAction75___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -93961,210 +12835,219 @@ void parser___ReduceAction875___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[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3423 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3424 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3425 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3426 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3427 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3428 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3429 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3430 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35342 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35342);
-    nit_exit(1);
-  }
-  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:35344 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35344);
-    nit_exit(1);
-  }
-  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:35346 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35346);
-    nit_exit(1);
-  }
-  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:35348 */
+  /* ./parser//parser.nit:3432 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35348);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3432);
   }
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
-  /* ./parser//parser.nit:35350 */
+  /* ./parser//parser.nit:3434 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35350);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3434);
   }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
-  /* ./parser//parser.nit:35352 */
+  /* ./parser//parser.nit:3436 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35352);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3436);
   }
-  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:35354 */
+  /* ./parser//parser.nit:3438 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35354);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3438);
   }
-  fra.me.REG[4] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
+  /* ./parser//parser.nit:3440 */
   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:35361 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35361);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3440);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:35363 */
+  /* ./parser//parser.nit:3441 */
+  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:3449 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3450 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction75____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35363);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3450);
   }
-  fra.me.REG[2] = 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[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(76);
+  REGB0 = ATTR_parser___ReduceAction75____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35374 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction875___init(val_t p0, int* init_table){
-  int itpos879 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction875].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos879]) return;
+  if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35376;
-  fra.me.meth = LOCATE_parser___ReduceAction875___init;
+  fra.me.line = 3453;
+  fra.me.meth = LOCATE_parser___ReduceAction75___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35376 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3453 */
+  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[itpos879] = 1;
+  init_table[itpos78] = 1;
   return;
 }
-void parser___ReduceAction876___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction76___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 = 35380;
-  fra.me.meth = LOCATE_parser___ReduceAction876___action;
+  fra.me.line = 3457;
+  fra.me.meth = LOCATE_parser___ReduceAction76___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3459 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3460 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:35388 */
+  /* ./parser//parser.nit:3461 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3462 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3463 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3464 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3465 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3466 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3467 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3469 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35388);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3469);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:35390 */
+  /* ./parser//parser.nit:3471 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35390);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3471);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:35392 */
+  /* ./parser//parser.nit:3473 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:35393 */
   } else {
-    /* ./parser//parser.nit:35395 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3473);
   }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(77);
+  /* ./parser//parser.nit:3475 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3475);
+  }
+  /* ./parser//parser.nit:3477 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3477);
+  }
+  /* ./parser//parser.nit:3479 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3479);
+  }
+  /* ./parser//parser.nit:3480 */
+  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:3488 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3489 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction76____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3489);
+  }
+  REGB0 = ATTR_parser___ReduceAction76____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35404 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction876___init(val_t p0, int* init_table){
-  int itpos880 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction876].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos880]) return;
+  if (init_table[itpos79]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35406;
-  fra.me.meth = LOCATE_parser___ReduceAction876___init;
+  fra.me.line = 3492;
+  fra.me.meth = LOCATE_parser___ReduceAction76___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35406 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3492 */
+  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[itpos880] = 1;
+  init_table[itpos79] = 1;
   return;
 }
-void parser___ReduceAction877___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction77___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 = 35410;
-  fra.me.meth = LOCATE_parser___ReduceAction877___action;
+  fra.me.line = 3496;
+  fra.me.meth = LOCATE_parser___ReduceAction77___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -94172,401 +13055,335 @@ void parser___ReduceAction877___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3498 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3499 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3500 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3501 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3502 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:35419 */
+  /* ./parser//parser.nit:3503 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3504 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3505 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3507 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35419);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3507);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:35421 */
+  /* ./parser//parser.nit:3509 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:35422 */
   } else {
-    /* ./parser//parser.nit:35424 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3509);
   }
-  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:35428 */
+  /* ./parser//parser.nit:3511 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35428);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3511);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:35430 */
+  /* ./parser//parser.nit:3513 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35430);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3513);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:35432 */
+  /* ./parser//parser.nit:3515 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:35433 */
   } else {
-    /* ./parser//parser.nit:35435 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3515);
   }
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(77);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35444 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction877___init(val_t p0, int* init_table){
-  int itpos881 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction877].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos881]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 35446;
-  fra.me.meth = LOCATE_parser___ReduceAction877___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35446 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos881] = 1;
-  return;
-}
-void parser___ReduceAction878___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 = 35450;
-  fra.me.meth = LOCATE_parser___ReduceAction878___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:35458 */
+  /* ./parser//parser.nit:3516 */
+  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);
+  /* ./parser//parser.nit:3525 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3526 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction77____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35458);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3526);
   }
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(77);
+  REGB0 = ATTR_parser___ReduceAction77____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35465 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction878___init(val_t p0, int* init_table){
-  int itpos882 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction878].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos882]) return;
+  if (init_table[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35467;
-  fra.me.meth = LOCATE_parser___ReduceAction878___init;
+  fra.me.line = 3529;
+  fra.me.meth = LOCATE_parser___ReduceAction77___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35467 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3529 */
+  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[itpos882] = 1;
+  init_table[itpos80] = 1;
   return;
 }
-void parser___ReduceAction879___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction78___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 = 35471;
-  fra.me.meth = LOCATE_parser___ReduceAction879___action;
+  fra.me.line = 3533;
+  fra.me.meth = LOCATE_parser___ReduceAction78___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3535 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3536 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:35480 */
+  /* ./parser//parser.nit:3537 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3538 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3539 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3540 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3541 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3542 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3543 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3545 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35480);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3545);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:35482 */
+  /* ./parser//parser.nit:3547 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:35483 */
   } else {
-    /* ./parser//parser.nit:35485 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3547);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:35489 */
+  /* ./parser//parser.nit:3549 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35489);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3549);
   }
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[2], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(77);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35496 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction879___init(val_t p0, int* init_table){
-  int itpos883 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction879].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos883]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 35498;
-  fra.me.meth = LOCATE_parser___ReduceAction879___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35498 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos883] = 1;
-  return;
-}
-void parser___ReduceAction880___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 = 35502;
-  fra.me.meth = LOCATE_parser___ReduceAction880___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:35508 */
+  /* ./parser//parser.nit:3551 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35508);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3551);
   }
-  fra.me.REG[3] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(78);
+  /* ./parser//parser.nit:3553 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3553);
+  }
+  /* ./parser//parser.nit:3555 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3555);
+  }
+  /* ./parser//parser.nit:3556 */
+  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);
+  /* ./parser//parser.nit:3565 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3566 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction78____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3566);
+  }
+  REGB0 = ATTR_parser___ReduceAction78____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35515 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction880___init(val_t p0, int* init_table){
-  int itpos884 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction880].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos884]) return;
+  if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35517;
-  fra.me.meth = LOCATE_parser___ReduceAction880___init;
+  fra.me.line = 3569;
+  fra.me.meth = LOCATE_parser___ReduceAction78___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35517 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3569 */
+  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[itpos884] = 1;
+  init_table[itpos81] = 1;
   return;
 }
-void parser___ReduceAction881___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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 = 35521;
-  fra.me.meth = LOCATE_parser___ReduceAction881___action;
+  fra.me.line = 3573;
+  fra.me.meth = LOCATE_parser___ReduceAction79___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3575 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3576 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:35528 */
+  /* ./parser//parser.nit:3577 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3578 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3579 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3580 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3581 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3582 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3583 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3585 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35528);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3585);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
-  /* ./parser//parser.nit:35530 */
+  /* ./parser//parser.nit:3587 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35530);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3587);
   }
-  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(78);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35537 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction881___init(val_t p0, int* init_table){
-  int itpos885 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction881].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos885]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 35539;
-  fra.me.meth = LOCATE_parser___ReduceAction881___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35539 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos885] = 1;
-  return;
-}
-void parser___ReduceAction882___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 = 35543;
-  fra.me.meth = LOCATE_parser___ReduceAction882___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35548 */
+  /* ./parser//parser.nit:3589 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35548);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3589);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(79);
+  /* ./parser//parser.nit:3591 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3591);
+  }
+  /* ./parser//parser.nit:3593 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3593);
+  }
+  /* ./parser//parser.nit:3595 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3595);
+  }
+  /* ./parser//parser.nit:3596 */
+  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]);
+  /* ./parser//parser.nit:3605 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3606 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction79____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3606);
+  }
+  REGB0 = ATTR_parser___ReduceAction79____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35550 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction882___init(val_t p0, int* init_table){
-  int itpos886 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction882].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos886]) return;
+  if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35552;
-  fra.me.meth = LOCATE_parser___ReduceAction882___init;
+  fra.me.line = 3609;
+  fra.me.meth = LOCATE_parser___ReduceAction79___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35552 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3609 */
+  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[itpos886] = 1;
+  init_table[itpos82] = 1;
   return;
 }
-void parser___ReduceAction883___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction80___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 = 35556;
-  fra.me.meth = LOCATE_parser___ReduceAction883___action;
+  fra.me.line = 3613;
+  fra.me.meth = LOCATE_parser___ReduceAction80___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -94575,105 +13392,122 @@ void parser___ReduceAction883___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3615 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3618 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3619 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:35568 */
+  /* ./parser//parser.nit:3621 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3622 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3623 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3624 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3626 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35568);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3626);
   }
-  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:35570 */
+  /* ./parser//parser.nit:3628 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35570);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3628);
   }
-  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:35572 */
+  /* ./parser//parser.nit:3630 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3630);
+  }
+  /* ./parser//parser.nit:3632 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35572);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3632);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:35574 */
+  /* ./parser//parser.nit:3634 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:35575 */
   } else {
-    /* ./parser//parser.nit:35577 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3634);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:35581 */
+  /* ./parser//parser.nit:3636 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35581);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3636);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:35583 */
+  /* ./parser//parser.nit:3638 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:35584 */
   } else {
-    /* ./parser//parser.nit:35586 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3638);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(79);
+  /* ./parser//parser.nit:3639 */
+  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]);
+  /* ./parser//parser.nit:3648 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3649 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction80____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3649);
+  }
+  REGB0 = ATTR_parser___ReduceAction80____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35596 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction883___init(val_t p0, int* init_table){
-  int itpos887 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction883].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos887]) return;
+  if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35598;
-  fra.me.meth = LOCATE_parser___ReduceAction883___init;
+  fra.me.line = 3652;
+  fra.me.meth = LOCATE_parser___ReduceAction80___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35598 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3652 */
+  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[itpos887] = 1;
+  init_table[itpos83] = 1;
   return;
 }
-void parser___ReduceAction884___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction81___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 = 35602;
-  fra.me.meth = LOCATE_parser___ReduceAction884___action;
+  fra.me.line = 3656;
+  fra.me.meth = LOCATE_parser___ReduceAction81___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -94681,146 +13515,192 @@ void parser___ReduceAction884___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3658 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3659 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3660 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:35613 */
+  /* ./parser//parser.nit:3661 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3662 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3664 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35613);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3664);
   }
-  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:35615 */
+  /* ./parser//parser.nit:3666 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35615);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3666);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:35617 */
+  /* ./parser//parser.nit:3668 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:35618 */
   } else {
-    /* ./parser//parser.nit:35620 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3668);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:35624 */
+  /* ./parser//parser.nit:3670 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35624);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3670);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:35626 */
+  /* ./parser//parser.nit:3671 */
+  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:3683 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3684 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction81____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:35627 */
   } else {
-    /* ./parser//parser.nit:35629 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3684);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(79);
+  REGB0 = ATTR_parser___ReduceAction81____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35639 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction884___init(val_t p0, int* init_table){
-  int itpos888 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction884].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos888]) return;
+  if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35641;
-  fra.me.meth = LOCATE_parser___ReduceAction884___init;
+  fra.me.line = 3687;
+  fra.me.meth = LOCATE_parser___ReduceAction81___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35641 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3687 */
+  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[itpos888] = 1;
+  init_table[itpos84] = 1;
   return;
 }
-void parser___ReduceAction885___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction82___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 = 35645;
-  fra.me.meth = LOCATE_parser___ReduceAction885___action;
+  fra.me.line = 3691;
+  fra.me.meth = LOCATE_parser___ReduceAction82___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35650 */
+  /* ./parser//parser.nit:3693 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3694 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3695 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3696 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3697 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3698 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3700 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35650);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3700);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(80);
+  /* ./parser//parser.nit:3702 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3702);
+  }
+  /* ./parser//parser.nit:3704 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3704);
+  }
+  /* ./parser//parser.nit:3706 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3706);
+  }
+  /* ./parser//parser.nit:3708 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3708);
+  }
+  /* ./parser//parser.nit:3709 */
+  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:3721 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3722 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction82____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3722);
+  }
+  REGB0 = ATTR_parser___ReduceAction82____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35652 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction885___init(val_t p0, int* init_table){
-  int itpos889 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction885].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos889]) return;
+  if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35654;
-  fra.me.meth = LOCATE_parser___ReduceAction885___init;
+  fra.me.line = 3725;
+  fra.me.meth = LOCATE_parser___ReduceAction82___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35654 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3725 */
+  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[itpos889] = 1;
+  init_table[itpos85] = 1;
   return;
 }
-void parser___ReduceAction886___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[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 = 35658;
-  fra.me.meth = LOCATE_parser___ReduceAction886___action;
+  fra.me.line = 3729;
+  fra.me.meth = LOCATE_parser___ReduceAction83___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -94833,2043 +13713,3559 @@ void parser___ReduceAction886___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3731 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3732 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3733 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3734 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3735 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3736 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:35673 */
+  /* ./parser//parser.nit:3738 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35673);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3738);
   }
-  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:35675 */
+  /* ./parser//parser.nit:3740 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35675);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3740);
   }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
-  /* ./parser//parser.nit:35677 */
+  /* ./parser//parser.nit:3742 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35677);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3742);
   }
-  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:35679 */
+  /* ./parser//parser.nit:3744 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35679);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3744);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
-  /* ./parser//parser.nit:35681 */
+  /* ./parser//parser.nit:3746 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35681);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3746);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35683 */
+  /* ./parser//parser.nit:3747 */
+  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:3759 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3760 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction83____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35683);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3760);
   }
-  fra.me.REG[2] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(80);
+  REGB0 = ATTR_parser___ReduceAction83____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35693 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction886___init(val_t p0, int* init_table){
-  int itpos890 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction886].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos890]) return;
+  if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35695;
-  fra.me.meth = LOCATE_parser___ReduceAction886___init;
+  fra.me.line = 3763;
+  fra.me.meth = LOCATE_parser___ReduceAction83___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35695 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3763 */
+  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[itpos890] = 1;
+  init_table[itpos86] = 1;
   return;
 }
-void parser___ReduceAction887___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction84___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 = 35699;
-  fra.me.meth = LOCATE_parser___ReduceAction887___action;
+  fra.me.line = 3767;
+  fra.me.meth = LOCATE_parser___ReduceAction84___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35704 */
+  /* ./parser//parser.nit:3769 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3770 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3771 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3772 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3773 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3774 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3775 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3777 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35704);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3777);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(81);
+  /* ./parser//parser.nit:3779 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3779);
+  }
+  /* ./parser//parser.nit:3781 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3781);
+  }
+  /* ./parser//parser.nit:3783 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3783);
+  }
+  /* ./parser//parser.nit:3785 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3785);
+  }
+  /* ./parser//parser.nit:3787 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3787);
+  }
+  /* ./parser//parser.nit:3788 */
+  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:3800 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3801 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction84____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3801);
+  }
+  REGB0 = ATTR_parser___ReduceAction84____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35706 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction887___init(val_t p0, int* init_table){
-  int itpos891 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction887].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos891]) return;
+  if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35708;
-  fra.me.meth = LOCATE_parser___ReduceAction887___init;
+  fra.me.line = 3804;
+  fra.me.meth = LOCATE_parser___ReduceAction84___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35708 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3804 */
+  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[itpos891] = 1;
+  init_table[itpos87] = 1;
   return;
 }
-void parser___ReduceAction888___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction85___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 = 35712;
-  fra.me.meth = LOCATE_parser___ReduceAction888___action;
+  fra.me.line = 3808;
+  fra.me.meth = LOCATE_parser___ReduceAction85___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3810 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3811 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35720 */
+  /* ./parser//parser.nit:3812 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3813 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3814 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3815 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3817 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35720);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3817);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35722 */
+  /* ./parser//parser.nit:3819 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35722);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3819);
   }
-  fra.me.REG[2] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(81);
+  /* ./parser//parser.nit:3821 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3821);
+  }
+  /* ./parser//parser.nit:3823 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3823);
+  }
+  /* ./parser//parser.nit:3825 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3825);
+  }
+  /* ./parser//parser.nit:3826 */
+  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:3838 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3839 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction85____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3839);
+  }
+  REGB0 = ATTR_parser___ReduceAction85____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35728 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction888___init(val_t p0, int* init_table){
-  int itpos892 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction888].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos892]) return;
+  if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35730;
-  fra.me.meth = LOCATE_parser___ReduceAction888___init;
+  fra.me.line = 3842;
+  fra.me.meth = LOCATE_parser___ReduceAction85___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35730 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3842 */
+  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[itpos892] = 1;
+  init_table[itpos88] = 1;
   return;
 }
-void parser___ReduceAction889___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction86___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 = 35734;
-  fra.me.meth = LOCATE_parser___ReduceAction889___action;
+  fra.me.line = 3846;
+  fra.me.meth = LOCATE_parser___ReduceAction86___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3848 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3849 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35742 */
+  /* ./parser//parser.nit:3850 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3851 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3852 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3853 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3854 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3856 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35742);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3856);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35744 */
+  /* ./parser//parser.nit:3858 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35744);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3858);
   }
-  fra.me.REG[2] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(81);
+  /* ./parser//parser.nit:3860 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3860);
+  }
+  /* ./parser//parser.nit:3862 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3862);
+  }
+  /* ./parser//parser.nit:3864 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3864);
+  }
+  /* ./parser//parser.nit:3866 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3866);
+  }
+  /* ./parser//parser.nit:3867 */
+  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:3879 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3880 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction86____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3880);
+  }
+  REGB0 = ATTR_parser___ReduceAction86____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35750 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction889___init(val_t p0, int* init_table){
-  int itpos893 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction889].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos893]) return;
+  if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35752;
-  fra.me.meth = LOCATE_parser___ReduceAction889___init;
+  fra.me.line = 3883;
+  fra.me.meth = LOCATE_parser___ReduceAction86___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35752 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3883 */
+  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[itpos893] = 1;
+  init_table[itpos89] = 1;
   return;
 }
-void parser___ReduceAction890___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction87___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 = 35756;
-  fra.me.meth = LOCATE_parser___ReduceAction890___action;
+  fra.me.line = 3887;
+  fra.me.meth = LOCATE_parser___ReduceAction87___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35761 */
+  /* ./parser//parser.nit:3889 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3890 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3891 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3892 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3893 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3894 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3895 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3897 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35761);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3897);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(82);
+  /* ./parser//parser.nit:3899 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3899);
+  }
+  /* ./parser//parser.nit:3901 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3901);
+  }
+  /* ./parser//parser.nit:3903 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3903);
+  }
+  /* ./parser//parser.nit:3905 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3905);
+  }
+  /* ./parser//parser.nit:3907 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3907);
+  }
+  /* ./parser//parser.nit:3908 */
+  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:3920 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3921 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction87____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3921);
+  }
+  REGB0 = ATTR_parser___ReduceAction87____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35763 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction890___init(val_t p0, int* init_table){
-  int itpos894 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction890].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos894]) return;
+  if (init_table[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35765;
-  fra.me.meth = LOCATE_parser___ReduceAction890___init;
+  fra.me.line = 3924;
+  fra.me.meth = LOCATE_parser___ReduceAction87___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35765 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3924 */
+  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[itpos894] = 1;
+  init_table[itpos90] = 1;
   return;
 }
-void parser___ReduceAction891___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction88___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 = 35769;
-  fra.me.meth = LOCATE_parser___ReduceAction891___action;
+  fra.me.line = 3928;
+  fra.me.meth = LOCATE_parser___ReduceAction88___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3930 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3931 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:35776 */
+  /* ./parser//parser.nit:3932 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3933 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3934 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3935 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3936 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3937 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3939 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35776);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3939);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35778 */
+  /* ./parser//parser.nit:3941 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35778);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3941);
   }
-  fra.me.REG[2] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(82);
+  /* ./parser//parser.nit:3943 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3943);
+  }
+  /* ./parser//parser.nit:3945 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3945);
+  }
+  /* ./parser//parser.nit:3947 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3947);
+  }
+  /* ./parser//parser.nit:3949 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3949);
+  }
+  /* ./parser//parser.nit:3951 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3951);
+  }
+  /* ./parser//parser.nit:3952 */
+  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:3964 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3965 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction88____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3965);
+  }
+  REGB0 = ATTR_parser___ReduceAction88____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35784 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction891___init(val_t p0, int* init_table){
-  int itpos895 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction891].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos895]) return;
+  if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35786;
-  fra.me.meth = LOCATE_parser___ReduceAction891___init;
+  fra.me.line = 3968;
+  fra.me.meth = LOCATE_parser___ReduceAction88___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35786 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:3968 */
+  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[itpos895] = 1;
+  init_table[itpos91] = 1;
   return;
 }
-void parser___ReduceAction892___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction89___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 = 35790;
-  fra.me.meth = LOCATE_parser___ReduceAction892___action;
+  fra.me.line = 3972;
+  fra.me.meth = LOCATE_parser___ReduceAction89___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35795 */
+  /* ./parser//parser.nit:3974 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:3975 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3976 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3977 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3978 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3979 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3981 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35795);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3981);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:3983 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3983);
+  }
+  /* ./parser//parser.nit:3985 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3985);
+  }
+  /* ./parser//parser.nit:3987 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3987);
+  }
+  /* ./parser//parser.nit:3989 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3989);
+  }
+  /* ./parser//parser.nit:3990 */
+  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:4002 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4003 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction89____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4003);
+  }
+  REGB0 = ATTR_parser___ReduceAction89____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35797 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction892___init(val_t p0, int* init_table){
-  int itpos896 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction892].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos896]) return;
+  if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35799;
-  fra.me.meth = LOCATE_parser___ReduceAction892___init;
+  fra.me.line = 4006;
+  fra.me.meth = LOCATE_parser___ReduceAction89___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35799 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4006 */
+  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[itpos896] = 1;
+  init_table[itpos92] = 1;
   return;
 }
-void parser___ReduceAction893___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction90___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 = 35803;
-  fra.me.meth = LOCATE_parser___ReduceAction893___action;
+  fra.me.line = 4010;
+  fra.me.meth = LOCATE_parser___ReduceAction90___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4012 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4013 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35811 */
+  /* ./parser//parser.nit:4014 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4015 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4016 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4017 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4018 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4020 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35811);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4020);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35813 */
+  /* ./parser//parser.nit:4022 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35813);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4022);
   }
-  fra.me.REG[2] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4024 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4024);
+  }
+  /* ./parser//parser.nit:4026 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4026);
+  }
+  /* ./parser//parser.nit:4028 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4028);
+  }
+  /* ./parser//parser.nit:4030 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4030);
+  }
+  /* ./parser//parser.nit:4031 */
+  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:4043 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4044 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction90____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4044);
+  }
+  REGB0 = ATTR_parser___ReduceAction90____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35819 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction893___init(val_t p0, int* init_table){
-  int itpos897 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction893].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos897]) return;
+  if (init_table[itpos93]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35821;
-  fra.me.meth = LOCATE_parser___ReduceAction893___init;
+  fra.me.line = 4047;
+  fra.me.meth = LOCATE_parser___ReduceAction90___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35821 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4047 */
+  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[itpos897] = 1;
+  init_table[itpos93] = 1;
   return;
 }
-void parser___ReduceAction894___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 35825;
-  fra.me.meth = LOCATE_parser___ReduceAction894___action;
+  fra.me.line = 4051;
+  fra.me.meth = LOCATE_parser___ReduceAction91___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4053 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4054 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35833 */
+  /* ./parser//parser.nit:4055 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4056 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4057 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4058 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4059 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4061 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35833);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4061);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35835 */
+  /* ./parser//parser.nit:4063 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35835);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4063);
   }
-  fra.me.REG[2] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4065 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4065);
+  }
+  /* ./parser//parser.nit:4067 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4067);
+  }
+  /* ./parser//parser.nit:4069 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4069);
+  }
+  /* ./parser//parser.nit:4071 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4071);
+  }
+  /* ./parser//parser.nit:4072 */
+  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:4084 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4085 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction91____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4085);
+  }
+  REGB0 = ATTR_parser___ReduceAction91____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35841 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction894___init(val_t p0, int* init_table){
-  int itpos898 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction894].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos898]) return;
+  if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35843;
-  fra.me.meth = LOCATE_parser___ReduceAction894___init;
+  fra.me.line = 4088;
+  fra.me.meth = LOCATE_parser___ReduceAction91___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35843 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4088 */
+  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[itpos898] = 1;
+  init_table[itpos94] = 1;
   return;
 }
-void parser___ReduceAction895___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 35847;
-  fra.me.meth = LOCATE_parser___ReduceAction895___action;
+  fra.me.line = 4092;
+  fra.me.meth = LOCATE_parser___ReduceAction92___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4094 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4095 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35855 */
+  /* ./parser//parser.nit:4096 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4097 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4098 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4099 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4100 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4101 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4103 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35855);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4103);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35857 */
+  /* ./parser//parser.nit:4105 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35857);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4105);
   }
-  fra.me.REG[2] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4107 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4107);
+  }
+  /* ./parser//parser.nit:4109 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4109);
+  }
+  /* ./parser//parser.nit:4111 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4111);
+  }
+  /* ./parser//parser.nit:4113 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4113);
+  }
+  /* ./parser//parser.nit:4115 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4115);
+  }
+  /* ./parser//parser.nit:4116 */
+  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:4128 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4129 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction92____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4129);
+  }
+  REGB0 = ATTR_parser___ReduceAction92____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35863 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction895___init(val_t p0, int* init_table){
-  int itpos899 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction895].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos899]) return;
+  if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35865;
-  fra.me.meth = LOCATE_parser___ReduceAction895___init;
+  fra.me.line = 4132;
+  fra.me.meth = LOCATE_parser___ReduceAction92___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35865 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4132 */
+  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[itpos899] = 1;
+  init_table[itpos95] = 1;
   return;
 }
-void parser___ReduceAction896___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction93___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 = 35869;
-  fra.me.meth = LOCATE_parser___ReduceAction896___action;
+  fra.me.line = 4136;
+  fra.me.meth = LOCATE_parser___ReduceAction93___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4138 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35877 */
+  /* ./parser//parser.nit:4140 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4141 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4142 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4143 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4144 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4146 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35877);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4146);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35879 */
+  /* ./parser//parser.nit:4148 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35879);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4148);
   }
-  fra.me.REG[2] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4150 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4150);
+  }
+  /* ./parser//parser.nit:4152 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4152);
+  }
+  /* ./parser//parser.nit:4154 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4154);
+  }
+  /* ./parser//parser.nit:4156 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4156);
+  }
+  /* ./parser//parser.nit:4157 */
+  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:4169 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4170 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction93____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4170);
+  }
+  REGB0 = ATTR_parser___ReduceAction93____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35885 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction896___init(val_t p0, int* init_table){
-  int itpos900 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction896].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos900]) return;
+  if (init_table[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35887;
-  fra.me.meth = LOCATE_parser___ReduceAction896___init;
+  fra.me.line = 4173;
+  fra.me.meth = LOCATE_parser___ReduceAction93___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35887 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4173 */
+  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[itpos900] = 1;
+  init_table[itpos96] = 1;
   return;
 }
-void parser___ReduceAction897___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction94___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 = 35891;
-  fra.me.meth = LOCATE_parser___ReduceAction897___action;
+  fra.me.line = 4177;
+  fra.me.meth = LOCATE_parser___ReduceAction94___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4179 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4180 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35899 */
+  /* ./parser//parser.nit:4181 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4182 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4183 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4184 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4185 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4186 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4188 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35899);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4188);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35901 */
+  /* ./parser//parser.nit:4190 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35901);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4190);
   }
-  fra.me.REG[2] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4192 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4192);
+  }
+  /* ./parser//parser.nit:4194 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4194);
+  }
+  /* ./parser//parser.nit:4196 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4196);
+  }
+  /* ./parser//parser.nit:4198 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4198);
+  }
+  /* ./parser//parser.nit:4200 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4200);
+  }
+  /* ./parser//parser.nit:4201 */
+  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:4213 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4214 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction94____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4214);
+  }
+  REGB0 = ATTR_parser___ReduceAction94____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35907 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction897___init(val_t p0, int* init_table){
-  int itpos901 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction897].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos901]) return;
+  if (init_table[itpos97]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35909;
-  fra.me.meth = LOCATE_parser___ReduceAction897___init;
+  fra.me.line = 4217;
+  fra.me.meth = LOCATE_parser___ReduceAction94___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35909 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4217 */
+  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[itpos901] = 1;
+  init_table[itpos97] = 1;
   return;
 }
-void parser___ReduceAction898___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction95___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 = 35913;
-  fra.me.meth = LOCATE_parser___ReduceAction898___action;
+  fra.me.line = 4221;
+  fra.me.meth = LOCATE_parser___ReduceAction95___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4223 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4224 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35921 */
+  /* ./parser//parser.nit:4225 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4226 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4227 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4228 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4229 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4230 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4232 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35921);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4232);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35923 */
+  /* ./parser//parser.nit:4234 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35923);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4234);
   }
-  fra.me.REG[2] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4236 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4236);
+  }
+  /* ./parser//parser.nit:4238 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4238);
+  }
+  /* ./parser//parser.nit:4240 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4240);
+  }
+  /* ./parser//parser.nit:4242 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4242);
+  }
+  /* ./parser//parser.nit:4244 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4244);
+  }
+  /* ./parser//parser.nit:4245 */
+  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:4257 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4258 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction95____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4258);
+  }
+  REGB0 = ATTR_parser___ReduceAction95____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35929 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction898___init(val_t p0, int* init_table){
-  int itpos902 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction898].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos902]) return;
+  if (init_table[itpos98]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35931;
-  fra.me.meth = LOCATE_parser___ReduceAction898___init;
+  fra.me.line = 4261;
+  fra.me.meth = LOCATE_parser___ReduceAction95___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35931 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4261 */
+  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[itpos902] = 1;
+  init_table[itpos98] = 1;
   return;
 }
-void parser___ReduceAction899___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction96___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 = 35935;
-  fra.me.meth = LOCATE_parser___ReduceAction899___action;
+  fra.me.line = 4265;
+  fra.me.meth = LOCATE_parser___ReduceAction96___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4267 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4268 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35943 */
+  /* ./parser//parser.nit:4269 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4270 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4271 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4272 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4273 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4274 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4275 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4277 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35943);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4277);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35945 */
+  /* ./parser//parser.nit:4279 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35945);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4279);
   }
-  fra.me.REG[2] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  /* ./parser//parser.nit:4281 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4281);
+  }
+  /* ./parser//parser.nit:4283 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4283);
+  }
+  /* ./parser//parser.nit:4285 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4285);
+  }
+  /* ./parser//parser.nit:4287 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4287);
+  }
+  /* ./parser//parser.nit:4289 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4289);
+  }
+  /* ./parser//parser.nit:4291 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4291);
+  }
+  /* ./parser//parser.nit:4292 */
+  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:4304 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4305 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction96____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4305);
+  }
+  REGB0 = ATTR_parser___ReduceAction96____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35951 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction899___init(val_t p0, int* init_table){
-  int itpos903 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction899].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos903]) return;
+  if (init_table[itpos99]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35953;
-  fra.me.meth = LOCATE_parser___ReduceAction899___init;
+  fra.me.line = 4308;
+  fra.me.meth = LOCATE_parser___ReduceAction96___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35953 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4308 */
+  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[itpos903] = 1;
+  init_table[itpos99] = 1;
   return;
 }
-void parser___ReduceAction900___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction97___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 = 35957;
-  fra.me.meth = LOCATE_parser___ReduceAction900___action;
+  fra.me.line = 4312;
+  fra.me.meth = LOCATE_parser___ReduceAction97___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4314 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4315 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4316 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4317 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4318 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4319 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4320 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4321 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4323 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4323);
+  }
+  /* ./parser//parser.nit:4325 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4325);
+  }
+  /* ./parser//parser.nit:4327 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4327);
+  }
+  /* ./parser//parser.nit:4329 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4329);
+  }
+  /* ./parser//parser.nit:4331 */
   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:35965 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35965);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4331);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:35967 */
+  /* ./parser//parser.nit:4332 */
+  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:4344 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4345 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction97____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35967);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4345);
   }
-  fra.me.REG[2] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
+  REGB0 = ATTR_parser___ReduceAction97____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35973 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction900___init(val_t p0, int* init_table){
-  int itpos904 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction900].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos904]) return;
+  if (init_table[itpos100]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 35975;
-  fra.me.meth = LOCATE_parser___ReduceAction900___init;
+  fra.me.line = 4348;
+  fra.me.meth = LOCATE_parser___ReduceAction97___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35975 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4348 */
+  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[itpos904] = 1;
+  init_table[itpos100] = 1;
   return;
 }
-void parser___ReduceAction901___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 35979;
-  fra.me.meth = LOCATE_parser___ReduceAction901___action;
+  fra.me.line = 4352;
+  fra.me.meth = LOCATE_parser___ReduceAction98___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4354 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4355 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:35987 */
+  /* ./parser//parser.nit:4356 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4357 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4358 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4359 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4360 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4361 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4362 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4364 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4364);
+  }
+  /* ./parser//parser.nit:4366 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4366);
+  }
+  /* ./parser//parser.nit:4368 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35987);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4368);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:35989 */
+  /* ./parser//parser.nit:4370 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 35989);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4370);
   }
-  fra.me.REG[2] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(83);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:35995 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction901___init(val_t p0, int* init_table){
-  int itpos905 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction901].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos905]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 35997;
-  fra.me.meth = LOCATE_parser___ReduceAction901___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:35997 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos905] = 1;
-  return;
-}
-void parser___ReduceAction902___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 = 36001;
-  fra.me.meth = LOCATE_parser___ReduceAction902___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36006 */
+  /* ./parser//parser.nit:4372 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36006);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4372);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(84);
+  /* ./parser//parser.nit:4374 */
+  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, 4374);
+  }
+  /* ./parser//parser.nit:4375 */
+  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:4387 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4388 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction98____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4388);
+  }
+  REGB0 = ATTR_parser___ReduceAction98____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36008 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction902___init(val_t p0, int* init_table){
-  int itpos906 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction902].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos906]) return;
+  if (init_table[itpos101]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36010;
-  fra.me.meth = LOCATE_parser___ReduceAction902___init;
+  fra.me.line = 4391;
+  fra.me.meth = LOCATE_parser___ReduceAction98___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36010 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4391 */
+  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[itpos906] = 1;
+  init_table[itpos101] = 1;
   return;
 }
-void parser___ReduceAction903___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction99___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 = 36014;
-  fra.me.meth = LOCATE_parser___ReduceAction903___action;
+  fra.me.line = 4395;
+  fra.me.meth = LOCATE_parser___ReduceAction99___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4397 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4398 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4399 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4400 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4401 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4402 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4403 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4404 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4405 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4407 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4407);
+  }
+  /* ./parser//parser.nit:4409 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4409);
+  }
+  /* ./parser//parser.nit:4411 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4411);
+  }
+  /* ./parser//parser.nit:4413 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4413);
+  }
+  /* ./parser//parser.nit:4415 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4415);
+  }
+  /* ./parser//parser.nit:4417 */
   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:36022 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36022);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4417);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36024 */
+  /* ./parser//parser.nit:4418 */
+  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:4430 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4431 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction99____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36024);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4431);
   }
-  fra.me.REG[2] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(84);
+  REGB0 = ATTR_parser___ReduceAction99____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36030 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction903___init(val_t p0, int* init_table){
-  int itpos907 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction903].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos907]) return;
+  if (init_table[itpos102]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36032;
-  fra.me.meth = LOCATE_parser___ReduceAction903___init;
+  fra.me.line = 4434;
+  fra.me.meth = LOCATE_parser___ReduceAction99___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36032 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4434 */
+  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[itpos907] = 1;
+  init_table[itpos102] = 1;
   return;
 }
-void parser___ReduceAction904___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 36036;
-  fra.me.meth = LOCATE_parser___ReduceAction904___action;
+  fra.me.line = 4438;
+  fra.me.meth = LOCATE_parser___ReduceAction100___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4440 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4441 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4442 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4443 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4444 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4445 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4446 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4447 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4448 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4449 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4451 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4451);
+  }
+  /* ./parser//parser.nit:4453 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4453);
+  }
+  /* ./parser//parser.nit:4455 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4455);
+  }
+  /* ./parser//parser.nit:4457 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4457);
+  }
+  /* ./parser//parser.nit:4459 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4459);
+  }
+  /* ./parser//parser.nit:4461 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4461);
+  }
+  /* ./parser//parser.nit:4463 */
   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:36044 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36044);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4463);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36046 */
+  /* ./parser//parser.nit:4464 */
+  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:4476 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4477 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction100____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36046);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4477);
   }
-  fra.me.REG[2] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(84);
+  REGB0 = ATTR_parser___ReduceAction100____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36052 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction904___init(val_t p0, int* init_table){
-  int itpos908 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction904].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos908]) return;
+  if (init_table[itpos103]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36054;
-  fra.me.meth = LOCATE_parser___ReduceAction904___init;
+  fra.me.line = 4480;
+  fra.me.meth = LOCATE_parser___ReduceAction100___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36054 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4480 */
+  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[itpos908] = 1;
+  init_table[itpos103] = 1;
   return;
 }
-void parser___ReduceAction905___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction101___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 = 36058;
-  fra.me.meth = LOCATE_parser___ReduceAction905___action;
+  fra.me.line = 4484;
+  fra.me.meth = LOCATE_parser___ReduceAction101___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36063 */
+  /* ./parser//parser.nit:4486 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4487 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4488 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4489 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4490 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4491 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4492 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4493 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4494 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4496 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36063);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4496);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(85);
+  /* ./parser//parser.nit:4498 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4498);
+  }
+  /* ./parser//parser.nit:4500 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4500);
+  }
+  /* ./parser//parser.nit:4502 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4502);
+  }
+  /* ./parser//parser.nit:4504 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4504);
+  }
+  /* ./parser//parser.nit:4506 */
+  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, 4506);
+  }
+  /* ./parser//parser.nit:4507 */
+  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:4519 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4520 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction101____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4520);
+  }
+  REGB0 = ATTR_parser___ReduceAction101____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36065 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction905___init(val_t p0, int* init_table){
-  int itpos909 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction905].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos909]) return;
+  if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36067;
-  fra.me.meth = LOCATE_parser___ReduceAction905___init;
+  fra.me.line = 4523;
+  fra.me.meth = LOCATE_parser___ReduceAction101___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36067 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4523 */
+  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[itpos909] = 1;
+  init_table[itpos104] = 1;
   return;
 }
-void parser___ReduceAction906___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction102___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 = 36071;
-  fra.me.meth = LOCATE_parser___ReduceAction906___action;
+  fra.me.line = 4527;
+  fra.me.meth = LOCATE_parser___ReduceAction102___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4529 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4530 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4531 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4532 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4533 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4534 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4535 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4536 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4537 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4538 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4540 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4540);
+  }
+  /* ./parser//parser.nit:4542 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4542);
+  }
+  /* ./parser//parser.nit:4544 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4544);
+  }
+  /* ./parser//parser.nit:4546 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4546);
+  }
+  /* ./parser//parser.nit:4548 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4548);
+  }
+  /* ./parser//parser.nit:4550 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4550);
+  }
+  /* ./parser//parser.nit:4552 */
   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:36079 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36079);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4552);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36081 */
+  /* ./parser//parser.nit:4553 */
+  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:4565 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4566 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction102____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36081);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4566);
   }
-  fra.me.REG[2] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(85);
+  REGB0 = ATTR_parser___ReduceAction102____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36087 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction906___init(val_t p0, int* init_table){
-  int itpos910 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction906].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos910]) return;
+  if (init_table[itpos105]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36089;
-  fra.me.meth = LOCATE_parser___ReduceAction906___init;
+  fra.me.line = 4569;
+  fra.me.meth = LOCATE_parser___ReduceAction102___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36089 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4569 */
+  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[itpos910] = 1;
+  init_table[itpos105] = 1;
   return;
 }
-void parser___ReduceAction907___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction103___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 = 36093;
-  fra.me.meth = LOCATE_parser___ReduceAction907___action;
+  fra.me.line = 4573;
+  fra.me.meth = LOCATE_parser___ReduceAction103___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4575 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4576 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4577 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4578 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4579 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4580 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4581 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4582 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4583 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4584 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4586 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4586);
+  }
+  /* ./parser//parser.nit:4588 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4588);
+  }
+  /* ./parser//parser.nit:4590 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4590);
+  }
+  /* ./parser//parser.nit:4592 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4592);
+  }
+  /* ./parser//parser.nit:4594 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4594);
+  }
+  /* ./parser//parser.nit:4596 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4596);
+  }
+  /* ./parser//parser.nit:4598 */
   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:36101 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36101);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4598);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36103 */
+  /* ./parser//parser.nit:4599 */
+  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:4611 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4612 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction103____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36103);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4612);
   }
-  fra.me.REG[2] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(85);
+  REGB0 = ATTR_parser___ReduceAction103____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36109 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction907___init(val_t p0, int* init_table){
-  int itpos911 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction907].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos911]) return;
+  if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36111;
-  fra.me.meth = LOCATE_parser___ReduceAction907___init;
+  fra.me.line = 4615;
+  fra.me.meth = LOCATE_parser___ReduceAction103___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36111 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4615 */
+  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[itpos911] = 1;
+  init_table[itpos106] = 1;
   return;
 }
-void parser___ReduceAction908___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction104___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 = 36115;
-  fra.me.meth = LOCATE_parser___ReduceAction908___action;
+  fra.me.line = 4619;
+  fra.me.meth = LOCATE_parser___ReduceAction104___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4621 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4622 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4623 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4624 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4625 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4626 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4627 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4628 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4629 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4630 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4631 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4633 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4633);
+  }
+  /* ./parser//parser.nit:4635 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4635);
+  }
+  /* ./parser//parser.nit:4637 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4637);
+  }
+  /* ./parser//parser.nit:4639 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4639);
+  }
+  /* ./parser//parser.nit:4641 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4641);
+  }
+  /* ./parser//parser.nit:4643 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4643);
+  }
+  /* ./parser//parser.nit:4645 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4645);
+  }
+  /* ./parser//parser.nit:4647 */
   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:36123 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36123);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4647);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36125 */
+  /* ./parser//parser.nit:4648 */
+  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:4660 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4661 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction104____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36125);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4661);
   }
-  fra.me.REG[2] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(85);
+  REGB0 = ATTR_parser___ReduceAction104____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36131 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction908___init(val_t p0, int* init_table){
-  int itpos912 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction908].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos912]) return;
+  if (init_table[itpos107]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36133;
-  fra.me.meth = LOCATE_parser___ReduceAction908___init;
+  fra.me.line = 4664;
+  fra.me.meth = LOCATE_parser___ReduceAction104___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36133 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4664 */
+  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[itpos912] = 1;
+  init_table[itpos107] = 1;
   return;
 }
-void parser___ReduceAction909___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction105___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 = 36137;
-  fra.me.meth = LOCATE_parser___ReduceAction909___action;
+  fra.me.line = 4668;
+  fra.me.meth = LOCATE_parser___ReduceAction105___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36142 */
+  /* ./parser//parser.nit:4670 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4671 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4672 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4673 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4674 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4675 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4676 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4677 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4678 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4680 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36142);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4680);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(86);
+  /* ./parser//parser.nit:4682 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4682);
+  }
+  /* ./parser//parser.nit:4684 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4684);
+  }
+  /* ./parser//parser.nit:4686 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4686);
+  }
+  /* ./parser//parser.nit:4688 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4688);
+  }
+  /* ./parser//parser.nit:4690 */
+  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, 4690);
+  }
+  /* ./parser//parser.nit:4691 */
+  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:4703 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4704 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction105____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4704);
+  }
+  REGB0 = ATTR_parser___ReduceAction105____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36144 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction909___init(val_t p0, int* init_table){
-  int itpos913 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction909].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos913]) return;
+  if (init_table[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36146;
-  fra.me.meth = LOCATE_parser___ReduceAction909___init;
+  fra.me.line = 4707;
+  fra.me.meth = LOCATE_parser___ReduceAction105___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36146 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4707 */
+  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[itpos913] = 1;
+  init_table[itpos108] = 1;
   return;
 }
-void parser___ReduceAction910___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction106___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 = 36150;
-  fra.me.meth = LOCATE_parser___ReduceAction910___action;
+  fra.me.line = 4711;
+  fra.me.meth = LOCATE_parser___ReduceAction106___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4713 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4714 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36157 */
+  /* ./parser//parser.nit:4715 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4716 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4717 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4718 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4719 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4720 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4721 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4722 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4724 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4724);
+  }
+  /* ./parser//parser.nit:4726 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36157);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4726);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36159 */
+  /* ./parser//parser.nit:4728 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36159);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4728);
   }
-  fra.me.REG[2] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(86);
+  /* ./parser//parser.nit:4730 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4730);
+  }
+  /* ./parser//parser.nit:4732 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4732);
+  }
+  /* ./parser//parser.nit:4734 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4734);
+  }
+  /* ./parser//parser.nit:4736 */
+  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, 4736);
+  }
+  /* ./parser//parser.nit:4737 */
+  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:4749 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4750 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction106____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4750);
+  }
+  REGB0 = ATTR_parser___ReduceAction106____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36165 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction910___init(val_t p0, int* init_table){
-  int itpos914 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction910].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos914]) return;
+  if (init_table[itpos109]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36167;
-  fra.me.meth = LOCATE_parser___ReduceAction910___init;
+  fra.me.line = 4753;
+  fra.me.meth = LOCATE_parser___ReduceAction106___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36167 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4753 */
+  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[itpos914] = 1;
+  init_table[itpos109] = 1;
   return;
 }
-void parser___ReduceAction911___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 36171;
-  fra.me.meth = LOCATE_parser___ReduceAction911___action;
+  fra.me.line = 4757;
+  fra.me.meth = LOCATE_parser___ReduceAction107___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4759 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4760 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
-  /* ./parser//parser.nit:36178 */
+  /* ./parser//parser.nit:4761 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4762 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4763 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4764 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4765 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4766 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4767 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4768 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4770 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36178);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4770);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36180 */
+  /* ./parser//parser.nit:4772 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36180);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4772);
   }
-  fra.me.REG[2] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(86);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36186 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction911___init(val_t p0, int* init_table){
-  int itpos915 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction911].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos915]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36188;
-  fra.me.meth = LOCATE_parser___ReduceAction911___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36188 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos915] = 1;
-  return;
-}
-void parser___ReduceAction912___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 = 36192;
-  fra.me.meth = LOCATE_parser___ReduceAction912___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36197 */
+  /* ./parser//parser.nit:4774 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36197);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4774);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(87);
+  /* ./parser//parser.nit:4776 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4776);
+  }
+  /* ./parser//parser.nit:4778 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4778);
+  }
+  /* ./parser//parser.nit:4780 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4780);
+  }
+  /* ./parser//parser.nit:4782 */
+  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, 4782);
+  }
+  /* ./parser//parser.nit:4783 */
+  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:4795 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4796 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction107____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4796);
+  }
+  REGB0 = ATTR_parser___ReduceAction107____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36199 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction912___init(val_t p0, int* init_table){
-  int itpos916 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction912].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos916]) return;
+  if (init_table[itpos110]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36201;
-  fra.me.meth = LOCATE_parser___ReduceAction912___init;
+  fra.me.line = 4799;
+  fra.me.meth = LOCATE_parser___ReduceAction107___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36201 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4799 */
+  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[itpos916] = 1;
+  init_table[itpos110] = 1;
   return;
 }
-void parser___ReduceAction913___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction108___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 = 36205;
-  fra.me.meth = LOCATE_parser___ReduceAction913___action;
+  fra.me.line = 4803;
+  fra.me.meth = LOCATE_parser___ReduceAction108___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4805 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4806 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4807 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4808 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  /* ./parser//parser.nit:36214 */
+  /* ./parser//parser.nit:4809 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4810 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4811 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4812 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4813 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4814 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4815 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4817 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36214);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4817);
   }
-  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:36216 */
+  /* ./parser//parser.nit:4819 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36216);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4819);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36218 */
+  /* ./parser//parser.nit:4821 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36218);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4821);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:36220 */
+  /* ./parser//parser.nit:4823 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:36221 */
   } else {
-    /* ./parser//parser.nit:36223 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4823);
   }
-  fra.me.REG[5] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(87);
+  /* ./parser//parser.nit:4825 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4825);
+  }
+  /* ./parser//parser.nit:4827 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4827);
+  }
+  /* ./parser//parser.nit:4829 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4829);
+  }
+  /* ./parser//parser.nit:4831 */
+  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, 4831);
+  }
+  /* ./parser//parser.nit:4832 */
+  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:4844 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4845 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction108____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4845);
+  }
+  REGB0 = ATTR_parser___ReduceAction108____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36233 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction913___init(val_t p0, int* init_table){
-  int itpos917 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction913].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos917]) return;
+  if (init_table[itpos111]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36235;
-  fra.me.meth = LOCATE_parser___ReduceAction913___init;
+  fra.me.line = 4848;
+  fra.me.meth = LOCATE_parser___ReduceAction108___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36235 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4848 */
+  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[itpos917] = 1;
+  init_table[itpos111] = 1;
   return;
 }
-void parser___ReduceAction914___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction109___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 = 36239;
-  fra.me.meth = LOCATE_parser___ReduceAction914___action;
+  fra.me.line = 4852;
+  fra.me.meth = LOCATE_parser___ReduceAction109___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4854 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4855 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4856 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36248 */
+  /* ./parser//parser.nit:4857 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4858 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4859 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4860 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4861 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4862 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4863 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4865 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4865);
+  }
+  /* ./parser//parser.nit:4867 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4867);
+  }
+  /* ./parser//parser.nit:4869 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4869);
+  }
+  /* ./parser//parser.nit:4871 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4871);
+  }
+  /* ./parser//parser.nit:4873 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4873);
+  }
+  /* ./parser//parser.nit:4875 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36248);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4875);
   }
+  /* ./parser//parser.nit:4877 */
   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:36250 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36250);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4877);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:36252 */
+  /* ./parser//parser.nit:4878 */
+  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:4890 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4891 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction109____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36252);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4891);
   }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(87);
+  REGB0 = ATTR_parser___ReduceAction109____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36259 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction914___init(val_t p0, int* init_table){
-  int itpos918 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction914].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos918]) return;
+  if (init_table[itpos112]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36261;
-  fra.me.meth = LOCATE_parser___ReduceAction914___init;
+  fra.me.line = 4894;
+  fra.me.meth = LOCATE_parser___ReduceAction109___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36261 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4894 */
+  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[itpos918] = 1;
+  init_table[itpos112] = 1;
   return;
 }
-void parser___ReduceAction915___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction110___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 = 36265;
-  fra.me.meth = LOCATE_parser___ReduceAction915___action;
+  fra.me.line = 4898;
+  fra.me.meth = LOCATE_parser___ReduceAction110___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4900 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4901 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
-  /* ./parser//parser.nit:36271 */
+  /* ./parser//parser.nit:4902 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4903 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4904 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4905 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4906 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4907 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4908 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4909 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4910 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4912 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36271);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4912);
   }
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:36275 */
+  /* ./parser//parser.nit:4914 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36275);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4914);
   }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(87);
+  /* ./parser//parser.nit:4916 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4916);
+  }
+  /* ./parser//parser.nit:4918 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4918);
+  }
+  /* ./parser//parser.nit:4920 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4920);
+  }
+  /* ./parser//parser.nit:4922 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4922);
+  }
+  /* ./parser//parser.nit:4924 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4924);
+  }
+  /* ./parser//parser.nit:4926 */
+  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, 4926);
+  }
+  /* ./parser//parser.nit:4927 */
+  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:4939 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4940 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction110____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4940);
+  }
+  REGB0 = ATTR_parser___ReduceAction110____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36282 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction915___init(val_t p0, int* init_table){
-  int itpos919 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction915].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos919]) return;
+  if (init_table[itpos113]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36284;
-  fra.me.meth = LOCATE_parser___ReduceAction915___init;
+  fra.me.line = 4943;
+  fra.me.meth = LOCATE_parser___ReduceAction110___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36284 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4943 */
+  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[itpos919] = 1;
+  init_table[itpos113] = 1;
   return;
 }
-void parser___ReduceAction916___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction111___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 = 36288;
-  fra.me.meth = LOCATE_parser___ReduceAction916___action;
+  fra.me.line = 4947;
+  fra.me.meth = LOCATE_parser___ReduceAction111___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4949 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4951 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4952 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4953 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4954 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4955 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4956 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4957 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4958 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4959 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4961 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4961);
+  }
+  /* ./parser//parser.nit:4963 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4963);
+  }
+  /* ./parser//parser.nit:4965 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4965);
+  }
+  /* ./parser//parser.nit:4967 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4967);
+  }
+  /* ./parser//parser.nit:4969 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4969);
+  }
+  /* ./parser//parser.nit:4971 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4971);
+  }
+  /* ./parser//parser.nit:4973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4973);
+  }
+  /* ./parser//parser.nit:4975 */
   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:36296 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36296);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4975);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:36298 */
+  /* ./parser//parser.nit:4976 */
+  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:4988 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4989 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction111____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36298);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4989);
   }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  REGB0 = ATTR_parser___ReduceAction111____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36304 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction916___init(val_t p0, int* init_table){
-  int itpos920 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction916].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos920]) return;
+  if (init_table[itpos114]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36306;
-  fra.me.meth = LOCATE_parser___ReduceAction916___init;
+  fra.me.line = 4992;
+  fra.me.meth = LOCATE_parser___ReduceAction111___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36306 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:4992 */
+  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[itpos920] = 1;
+  init_table[itpos114] = 1;
   return;
 }
-void parser___ReduceAction917___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction112___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 = 36310;
-  fra.me.meth = LOCATE_parser___ReduceAction917___action;
+  fra.me.line = 4996;
+  fra.me.meth = LOCATE_parser___ReduceAction112___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 12;
   fra.me.REG[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[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:36317 */
+  /* ./parser//parser.nit:4998 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:4999 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5000 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5001 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5002 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5003 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5004 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5005 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5006 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5007 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5008 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5009 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5011 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36317);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5011);
   }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5013 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5013);
+  }
+  /* ./parser//parser.nit:5015 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5015);
+  }
+  /* ./parser//parser.nit:5017 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5017);
+  }
+  /* ./parser//parser.nit:5019 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5019);
+  }
+  /* ./parser//parser.nit:5021 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5021);
+  }
+  /* ./parser//parser.nit:5023 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5023);
+  }
+  /* ./parser//parser.nit:5025 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5025);
+  }
+  /* ./parser//parser.nit:5027 */
+  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, 5027);
+  }
+  /* ./parser//parser.nit:5028 */
+  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:5040 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5041 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction112____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5041);
+  }
+  REGB0 = ATTR_parser___ReduceAction112____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36323 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction917___init(val_t p0, int* init_table){
-  int itpos921 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction917].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos921]) return;
+  if (init_table[itpos115]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36325;
-  fra.me.meth = LOCATE_parser___ReduceAction917___init;
+  fra.me.line = 5044;
+  fra.me.meth = LOCATE_parser___ReduceAction112___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36325 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5044 */
+  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[itpos921] = 1;
+  init_table[itpos115] = 1;
   return;
 }
-void parser___ReduceAction918___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[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 = 36329;
-  fra.me.meth = LOCATE_parser___ReduceAction918___action;
+  fra.me.line = 5048;
+  fra.me.meth = LOCATE_parser___ReduceAction113___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -96881,85 +17277,90 @@ void parser___ReduceAction918___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5050 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5052 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:36340 */
+  /* ./parser//parser.nit:5053 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5054 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5056 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36340);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5056);
   }
-  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:36342 */
+  /* ./parser//parser.nit:5058 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5058);
+  }
+  /* ./parser//parser.nit:5060 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36342);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5060);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36344 */
+  /* ./parser//parser.nit:5062 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36344);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5062);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:36346 */
+  /* ./parser//parser.nit:5063 */
+  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:5075 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5076 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction113____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:36347 */
   } else {
-    /* ./parser//parser.nit:36349 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5076);
   }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(88);
+  REGB0 = ATTR_parser___ReduceAction113____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36359 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction918___init(val_t p0, int* init_table){
-  int itpos922 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction918].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos922]) return;
+  if (init_table[itpos116]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36361;
-  fra.me.meth = LOCATE_parser___ReduceAction918___init;
+  fra.me.line = 5079;
+  fra.me.meth = LOCATE_parser___ReduceAction113___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36361 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5079 */
+  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[itpos922] = 1;
+  init_table[itpos116] = 1;
   return;
 }
-void parser___ReduceAction919___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction114___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 = 36365;
-  fra.me.meth = LOCATE_parser___ReduceAction919___action;
+  fra.me.line = 5083;
+  fra.me.meth = LOCATE_parser___ReduceAction114___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -96967,397 +17368,527 @@ void parser___ReduceAction919___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5085 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5086 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:36375 */
+  /* ./parser//parser.nit:5087 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5088 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5089 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5090 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5092 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5092);
+  }
+  /* ./parser//parser.nit:5094 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5094);
+  }
+  /* ./parser//parser.nit:5096 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5096);
+  }
+  /* ./parser//parser.nit:5098 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36375);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5098);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36377 */
+  /* ./parser//parser.nit:5100 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36377);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5100);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:36379 */
+  /* ./parser//parser.nit:5101 */
+  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:5113 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5114 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction114____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:36380 */
   } else {
-    /* ./parser//parser.nit:36382 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5114);
   }
-  fra.me.REG[5] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(88);
+  REGB0 = ATTR_parser___ReduceAction114____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36392 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction919___init(val_t p0, int* init_table){
-  int itpos923 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction919].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos923]) return;
+  if (init_table[itpos117]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36394;
-  fra.me.meth = LOCATE_parser___ReduceAction919___init;
+  fra.me.line = 5117;
+  fra.me.meth = LOCATE_parser___ReduceAction114___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36394 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5117 */
+  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[itpos923] = 1;
+  init_table[itpos117] = 1;
   return;
 }
-void parser___ReduceAction920___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction115___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 = 36398;
-  fra.me.meth = LOCATE_parser___ReduceAction920___action;
+  fra.me.line = 5121;
+  fra.me.meth = LOCATE_parser___ReduceAction115___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5123 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:36405 */
+  /* ./parser//parser.nit:5125 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5126 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5127 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5128 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36405);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5130);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36407 */
+  /* ./parser//parser.nit:5132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36407);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5132);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:36409 */
+  /* ./parser//parser.nit:5134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:36410 */
   } else {
-    /* ./parser//parser.nit:36412 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5134);
   }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5136 */
+  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, 5136);
+  }
+  /* ./parser//parser.nit:5138 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5138);
+  }
+  /* ./parser//parser.nit:5139 */
+  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:5151 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5152 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction115____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5152);
+  }
+  REGB0 = ATTR_parser___ReduceAction115____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36421 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction920___init(val_t p0, int* init_table){
-  int itpos924 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction920].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos924]) return;
+  if (init_table[itpos118]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36423;
-  fra.me.meth = LOCATE_parser___ReduceAction920___init;
+  fra.me.line = 5155;
+  fra.me.meth = LOCATE_parser___ReduceAction115___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36423 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5155 */
+  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[itpos924] = 1;
+  init_table[itpos118] = 1;
   return;
 }
-void parser___ReduceAction921___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction116___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 = 36427;
-  fra.me.meth = LOCATE_parser___ReduceAction921___action;
+  fra.me.line = 5159;
+  fra.me.meth = LOCATE_parser___ReduceAction116___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5161 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5162 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5163 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:36435 */
+  /* ./parser//parser.nit:5164 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5165 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5166 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5167 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5169 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36435);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5169);
   }
-  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:36437 */
+  /* ./parser//parser.nit:5171 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36437);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5171);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36439 */
+  /* ./parser//parser.nit:5173 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36439);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5173);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:36441 */
+  /* ./parser//parser.nit:5175 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:36442 */
   } else {
-    /* ./parser//parser.nit:36444 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5175);
   }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5177 */
+  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, 5177);
+  }
+  /* ./parser//parser.nit:5179 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5179);
+  }
+  /* ./parser//parser.nit:5180 */
+  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:5192 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5193 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction116____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5193);
+  }
+  REGB0 = ATTR_parser___ReduceAction116____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36453 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction921___init(val_t p0, int* init_table){
-  int itpos925 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction921].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos925]) return;
+  if (init_table[itpos119]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36455;
-  fra.me.meth = LOCATE_parser___ReduceAction921___init;
+  fra.me.line = 5196;
+  fra.me.meth = LOCATE_parser___ReduceAction116___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36455 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5196 */
+  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[itpos925] = 1;
+  init_table[itpos119] = 1;
   return;
 }
-void parser___ReduceAction922___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction117___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 = 36459;
-  fra.me.meth = LOCATE_parser___ReduceAction922___action;
+  fra.me.line = 5200;
+  fra.me.meth = LOCATE_parser___ReduceAction117___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5202 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5203 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5204 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:36469 */
+  /* ./parser//parser.nit:5205 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5206 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5207 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5209 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36469);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5209);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:36471 */
+  /* ./parser//parser.nit:5211 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36471);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5211);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36473 */
+  /* ./parser//parser.nit:5213 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36473);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5213);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:36475 */
+  /* ./parser//parser.nit:5215 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:36476 */
   } else {
-    /* ./parser//parser.nit:36478 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5215);
   }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5217 */
+  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, 5217);
+  }
+  /* ./parser//parser.nit:5218 */
+  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:5230 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5231 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction117____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5231);
+  }
+  REGB0 = ATTR_parser___ReduceAction117____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36487 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction922___init(val_t p0, int* init_table){
-  int itpos926 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction922].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos926]) return;
+  if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36489;
-  fra.me.meth = LOCATE_parser___ReduceAction922___init;
+  fra.me.line = 5234;
+  fra.me.meth = LOCATE_parser___ReduceAction117___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36489 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5234 */
+  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[itpos926] = 1;
+  init_table[itpos120] = 1;
   return;
 }
-void parser___ReduceAction923___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction118___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 = 36493;
-  fra.me.meth = LOCATE_parser___ReduceAction923___action;
+  fra.me.line = 5238;
+  fra.me.meth = LOCATE_parser___ReduceAction118___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5240 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5241 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:36502 */
+  /* ./parser//parser.nit:5242 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5243 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5244 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5245 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5246 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5248 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36502);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5248);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36504 */
+  /* ./parser//parser.nit:5250 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36504);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5250);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:36506 */
+  /* ./parser//parser.nit:5252 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:36507 */
   } else {
-    /* ./parser//parser.nit:36509 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5252);
   }
-  fra.me.REG[4] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5254 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5254);
+  }
+  /* ./parser//parser.nit:5256 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5256);
+  }
+  /* ./parser//parser.nit:5258 */
+  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, 5258);
+  }
+  /* ./parser//parser.nit:5259 */
+  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:5271 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5272 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction118____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5272);
+  }
+  REGB0 = ATTR_parser___ReduceAction118____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36518 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction923___init(val_t p0, int* init_table){
-  int itpos927 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction923].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos927]) return;
+  if (init_table[itpos121]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36520;
-  fra.me.meth = LOCATE_parser___ReduceAction923___init;
+  fra.me.line = 5275;
+  fra.me.meth = LOCATE_parser___ReduceAction118___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36520 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5275 */
+  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[itpos927] = 1;
+  init_table[itpos121] = 1;
   return;
 }
-void parser___ReduceAction924___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction119___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 = 36524;
-  fra.me.meth = LOCATE_parser___ReduceAction924___action;
+  fra.me.line = 5279;
+  fra.me.meth = LOCATE_parser___ReduceAction119___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -97365,1450 +17896,2309 @@ void parser___ReduceAction924___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5281 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5282 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5283 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5284 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:36536 */
+  /* ./parser//parser.nit:5285 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5286 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5287 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5289 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36536);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5289);
   }
-  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:36538 */
+  /* ./parser//parser.nit:5291 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36538);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5291);
   }
-  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:36540 */
+  /* ./parser//parser.nit:5293 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36540);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5293);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36542 */
+  /* ./parser//parser.nit:5295 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36542);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5295);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:36544 */
+  /* ./parser//parser.nit:5297 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:36545 */
   } else {
-    /* ./parser//parser.nit:36547 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5297);
   }
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(88);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36557 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction924___init(val_t p0, int* init_table){
-  int itpos928 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction924].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos928]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36559;
-  fra.me.meth = LOCATE_parser___ReduceAction924___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36559 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos928] = 1;
-  return;
-}
-void parser___ReduceAction925___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 = 36563;
-  fra.me.meth = LOCATE_parser___ReduceAction925___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
-  /* ./parser//parser.nit:36568 */
+  /* ./parser//parser.nit:5299 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36568);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5299);
   }
-  fra.me.REG[2] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36573 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction925___init(val_t p0, int* init_table){
-  int itpos929 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction925].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos929]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36575;
-  fra.me.meth = LOCATE_parser___ReduceAction925___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36575 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos929] = 1;
-  return;
-}
-void parser___ReduceAction926___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 = 36579;
-  fra.me.meth = LOCATE_parser___ReduceAction926___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
-  /* ./parser//parser.nit:36584 */
+  /* ./parser//parser.nit:5300 */
+  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:5312 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5313 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction119____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36584);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5313);
   }
-  fra.me.REG[2] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  REGB0 = ATTR_parser___ReduceAction119____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36589 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction926___init(val_t p0, int* init_table){
-  int itpos930 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction926].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos930]) return;
+  if (init_table[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36591;
-  fra.me.meth = LOCATE_parser___ReduceAction926___init;
+  fra.me.line = 5316;
+  fra.me.meth = LOCATE_parser___ReduceAction119___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36591 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5316 */
+  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[itpos930] = 1;
+  init_table[itpos122] = 1;
   return;
 }
-void parser___ReduceAction927___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction120___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 = 36595;
-  fra.me.meth = LOCATE_parser___ReduceAction927___action;
+  fra.me.line = 5320;
+  fra.me.meth = LOCATE_parser___ReduceAction120___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
-  /* ./parser//parser.nit:36600 */
+  /* ./parser//parser.nit:5322 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5323 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5324 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5325 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5326 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5327 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5328 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5329 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5331 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36600);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5331);
   }
-  fra.me.REG[2] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5333 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5333);
+  }
+  /* ./parser//parser.nit:5335 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5335);
+  }
+  /* ./parser//parser.nit:5337 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5337);
+  }
+  /* ./parser//parser.nit:5339 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5339);
+  }
+  /* ./parser//parser.nit:5341 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5341);
+  }
+  /* ./parser//parser.nit:5343 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5343);
+  }
+  /* ./parser//parser.nit:5344 */
+  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:5356 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5357 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction120____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5357);
+  }
+  REGB0 = ATTR_parser___ReduceAction120____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36605 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction927___init(val_t p0, int* init_table){
-  int itpos931 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction927].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos931]) return;
+  if (init_table[itpos123]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36607;
-  fra.me.meth = LOCATE_parser___ReduceAction927___init;
+  fra.me.line = 5360;
+  fra.me.meth = LOCATE_parser___ReduceAction120___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36607 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5360 */
+  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[itpos931] = 1;
+  init_table[itpos123] = 1;
   return;
 }
-void parser___ReduceAction928___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction121___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 = 36611;
-  fra.me.meth = LOCATE_parser___ReduceAction928___action;
+  fra.me.line = 5364;
+  fra.me.meth = LOCATE_parser___ReduceAction121___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:36616 */
+  /* ./parser//parser.nit:5366 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5367 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5368 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5369 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5370 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5371 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5372 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5373 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5375 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36616);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5375);
   }
-  fra.me.REG[2] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5377 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5377);
+  }
+  /* ./parser//parser.nit:5379 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5379);
+  }
+  /* ./parser//parser.nit:5381 */
+  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, 5381);
+  }
+  /* ./parser//parser.nit:5383 */
+  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, 5383);
+  }
+  /* ./parser//parser.nit:5384 */
+  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:5396 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5397 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction121____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5397);
+  }
+  REGB0 = ATTR_parser___ReduceAction121____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36621 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction928___init(val_t p0, int* init_table){
-  int itpos932 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction928].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos932]) return;
+  if (init_table[itpos124]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36623;
-  fra.me.meth = LOCATE_parser___ReduceAction928___init;
+  fra.me.line = 5400;
+  fra.me.meth = LOCATE_parser___ReduceAction121___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36623 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5400 */
+  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[itpos932] = 1;
+  init_table[itpos124] = 1;
   return;
 }
-void parser___ReduceAction929___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction122___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 = 36627;
-  fra.me.meth = LOCATE_parser___ReduceAction929___action;
+  fra.me.line = 5404;
+  fra.me.meth = LOCATE_parser___ReduceAction122___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
-  /* ./parser//parser.nit:36632 */
+  /* ./parser//parser.nit:5406 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5407 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5408 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5409 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5410 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5411 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5412 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5413 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5414 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5416 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36632);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5416);
   }
-  fra.me.REG[2] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5418 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5418);
+  }
+  /* ./parser//parser.nit:5420 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5420);
+  }
+  /* ./parser//parser.nit:5422 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5422);
+  }
+  /* ./parser//parser.nit:5424 */
+  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, 5424);
+  }
+  /* ./parser//parser.nit:5426 */
+  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, 5426);
+  }
+  /* ./parser//parser.nit:5427 */
+  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:5439 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5440 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction122____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5440);
+  }
+  REGB0 = ATTR_parser___ReduceAction122____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36637 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction929___init(val_t p0, int* init_table){
-  int itpos933 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction929].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos933]) return;
+  if (init_table[itpos125]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36639;
-  fra.me.meth = LOCATE_parser___ReduceAction929___init;
+  fra.me.line = 5443;
+  fra.me.meth = LOCATE_parser___ReduceAction122___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36639 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5443 */
+  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[itpos933] = 1;
+  init_table[itpos125] = 1;
   return;
 }
-void parser___ReduceAction930___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 36643;
-  fra.me.meth = LOCATE_parser___ReduceAction930___action;
+  fra.me.line = 5447;
+  fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
-  /* ./parser//parser.nit:36648 */
+  /* ./parser//parser.nit:5449 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5450 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5451 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5452 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5453 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5454 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5455 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5456 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5457 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5459 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5459);
+  }
+  /* ./parser//parser.nit:5461 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5461);
+  }
+  /* ./parser//parser.nit:5463 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5463);
+  }
+  /* ./parser//parser.nit:5465 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5465);
+  }
+  /* ./parser//parser.nit:5467 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36648);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5467);
   }
-  fra.me.REG[2] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36653 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction930___init(val_t p0, int* init_table){
-  int itpos934 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction930].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos934]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36655;
-  fra.me.meth = LOCATE_parser___ReduceAction930___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36655 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos934] = 1;
-  return;
-}
-void parser___ReduceAction931___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 = 36659;
-  fra.me.meth = LOCATE_parser___ReduceAction931___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
-  /* ./parser//parser.nit:36664 */
+  /* ./parser//parser.nit:5469 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36664);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5469);
   }
-  fra.me.REG[2] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5470 */
+  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:5482 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5483 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction123____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5483);
+  }
+  REGB0 = ATTR_parser___ReduceAction123____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36669 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction931___init(val_t p0, int* init_table){
-  int itpos935 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction931].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos935]) return;
+  if (init_table[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36671;
-  fra.me.meth = LOCATE_parser___ReduceAction931___init;
+  fra.me.line = 5486;
+  fra.me.meth = LOCATE_parser___ReduceAction123___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36671 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5486 */
+  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[itpos935] = 1;
+  init_table[itpos126] = 1;
   return;
 }
-void parser___ReduceAction932___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction124___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 = 36675;
-  fra.me.meth = LOCATE_parser___ReduceAction932___action;
+  fra.me.line = 5490;
+  fra.me.meth = LOCATE_parser___ReduceAction124___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:36680 */
+  /* ./parser//parser.nit:5492 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5493 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5494 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5495 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5496 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5497 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5498 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5499 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5500 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5501 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5503 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36680);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5503);
   }
-  fra.me.REG[2] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5505 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5505);
+  }
+  /* ./parser//parser.nit:5507 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5507);
+  }
+  /* ./parser//parser.nit:5509 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5509);
+  }
+  /* ./parser//parser.nit:5511 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5511);
+  }
+  /* ./parser//parser.nit:5513 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5513);
+  }
+  /* ./parser//parser.nit:5515 */
+  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, 5515);
+  }
+  /* ./parser//parser.nit:5516 */
+  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:5528 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5529 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction124____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5529);
+  }
+  REGB0 = ATTR_parser___ReduceAction124____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36685 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction932___init(val_t p0, int* init_table){
-  int itpos936 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction932].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos936]) return;
+  if (init_table[itpos127]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36687;
-  fra.me.meth = LOCATE_parser___ReduceAction932___init;
+  fra.me.line = 5532;
+  fra.me.meth = LOCATE_parser___ReduceAction124___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36687 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5532 */
+  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[itpos936] = 1;
+  init_table[itpos127] = 1;
   return;
 }
-void parser___ReduceAction933___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction125___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 = 36691;
-  fra.me.meth = LOCATE_parser___ReduceAction933___action;
+  fra.me.line = 5536;
+  fra.me.meth = LOCATE_parser___ReduceAction125___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36696 */
+  /* ./parser//parser.nit:5538 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5539 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5540 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5541 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5542 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5543 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5544 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5545 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5546 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5548 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36696);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5548);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5550 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5550);
+  }
+  /* ./parser//parser.nit:5552 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5552);
+  }
+  /* ./parser//parser.nit:5554 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5554);
+  }
+  /* ./parser//parser.nit:5556 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5556);
+  }
+  /* ./parser//parser.nit:5558 */
+  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, 5558);
+  }
+  /* ./parser//parser.nit:5559 */
+  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:5571 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5572 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction125____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5572);
+  }
+  REGB0 = ATTR_parser___ReduceAction125____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36698 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction933___init(val_t p0, int* init_table){
-  int itpos937 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction933].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos937]) return;
+  if (init_table[itpos128]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36700;
-  fra.me.meth = LOCATE_parser___ReduceAction933___init;
+  fra.me.line = 5575;
+  fra.me.meth = LOCATE_parser___ReduceAction125___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36700 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5575 */
+  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[itpos937] = 1;
+  init_table[itpos128] = 1;
   return;
 }
-void parser___ReduceAction934___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction126___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 = 36704;
-  fra.me.meth = LOCATE_parser___ReduceAction934___action;
+  fra.me.line = 5579;
+  fra.me.meth = LOCATE_parser___ReduceAction126___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5581 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5582 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36711 */
+  /* ./parser//parser.nit:5583 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5584 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5585 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5586 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5587 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5588 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5589 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5590 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5592 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36711);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5592);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5594 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5594);
+  }
+  /* ./parser//parser.nit:5596 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5596);
+  }
+  /* ./parser//parser.nit:5598 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5598);
+  }
+  /* ./parser//parser.nit:5600 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5600);
+  }
+  /* ./parser//parser.nit:5602 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5602);
+  }
+  /* ./parser//parser.nit:5604 */
+  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, 5604);
+  }
+  /* ./parser//parser.nit:5605 */
+  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:5617 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5618 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction126____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5618);
+  }
+  REGB0 = ATTR_parser___ReduceAction126____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36713 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction934___init(val_t p0, int* init_table){
-  int itpos938 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction934].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos938]) return;
+  if (init_table[itpos129]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36715;
-  fra.me.meth = LOCATE_parser___ReduceAction934___init;
+  fra.me.line = 5621;
+  fra.me.meth = LOCATE_parser___ReduceAction126___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36715 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5621 */
+  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[itpos938] = 1;
+  init_table[itpos129] = 1;
   return;
 }
-void parser___ReduceAction935___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction127___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 = 36719;
-  fra.me.meth = LOCATE_parser___ReduceAction935___action;
+  fra.me.line = 5625;
+  fra.me.meth = LOCATE_parser___ReduceAction127___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5627 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5628 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36733 */
+  /* ./parser//parser.nit:5632 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5633 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5634 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5635 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5636 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5638 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36733);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5638);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  /* ./parser//parser.nit:36735 */
+  /* ./parser//parser.nit:5640 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36735);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5640);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:36737 */
+  /* ./parser//parser.nit:5642 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36737);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5642);
   }
-  fra.me.REG[2] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5644 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5644);
+  }
+  /* ./parser//parser.nit:5646 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5646);
+  }
+  /* ./parser//parser.nit:5648 */
+  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, 5648);
+  }
+  /* ./parser//parser.nit:5650 */
+  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, 5650);
+  }
+  /* ./parser//parser.nit:5651 */
+  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:5663 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5664 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction127____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5664);
+  }
+  REGB0 = ATTR_parser___ReduceAction127____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36744 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction935___init(val_t p0, int* init_table){
-  int itpos939 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction935].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos939]) return;
+  if (init_table[itpos130]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36746;
-  fra.me.meth = LOCATE_parser___ReduceAction935___init;
+  fra.me.line = 5667;
+  fra.me.meth = LOCATE_parser___ReduceAction127___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36746 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5667 */
+  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[itpos939] = 1;
+  init_table[itpos130] = 1;
   return;
 }
-void parser___ReduceAction936___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction128___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 = 36750;
-  fra.me.meth = LOCATE_parser___ReduceAction936___action;
+  fra.me.line = 5671;
+  fra.me.meth = LOCATE_parser___ReduceAction128___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5673 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5674 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5675 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5676 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5677 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5678 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36766 */
+  /* ./parser//parser.nit:5679 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5680 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5681 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5682 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5683 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5685 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36766);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5685);
   }
-  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:36768 */
+  /* ./parser//parser.nit:5687 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5687);
+  }
+  /* ./parser//parser.nit:5689 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36768);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5689);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:36770 */
+  /* ./parser//parser.nit:5691 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36770);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5691);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:36772 */
+  /* ./parser//parser.nit:5693 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36772);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5693);
   }
-  fra.me.REG[2] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(88);
+  /* ./parser//parser.nit:5695 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5695);
+  }
+  /* ./parser//parser.nit:5697 */
+  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, 5697);
+  }
+  /* ./parser//parser.nit:5699 */
+  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, 5699);
+  }
+  /* ./parser//parser.nit:5700 */
+  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:5712 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5713 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction128____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5713);
+  }
+  REGB0 = ATTR_parser___ReduceAction128____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36780 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction936___init(val_t p0, int* init_table){
-  int itpos940 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction936].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos940]) return;
+  if (init_table[itpos131]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36782;
-  fra.me.meth = LOCATE_parser___ReduceAction936___init;
+  fra.me.line = 5716;
+  fra.me.meth = LOCATE_parser___ReduceAction128___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36782 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5716 */
+  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[itpos940] = 1;
+  init_table[itpos131] = 1;
   return;
 }
-void parser___ReduceAction937___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction129___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_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 = 36786;
-  fra.me.meth = LOCATE_parser___ReduceAction937___action;
+  fra.me.line = 5720;
+  fra.me.meth = LOCATE_parser___ReduceAction129___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5722 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5723 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36795 */
+  /* ./parser//parser.nit:5724 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5725 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5726 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5727 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5728 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5730 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36795);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5730);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:36796 */
+  /* ./parser//parser.nit:5732 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5732);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:5734 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:36797 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5734);
   }
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(89);
+  /* ./parser//parser.nit:5736 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5736);
+  }
+  /* ./parser//parser.nit:5738 */
+  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, 5738);
+  }
+  /* ./parser//parser.nit:5739 */
+  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:5748 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5749 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction129____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5749);
+  }
+  REGB0 = ATTR_parser___ReduceAction129____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36803 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction937___init(val_t p0, int* init_table){
-  int itpos941 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction937].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos941]) return;
+  if (init_table[itpos132]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36805;
-  fra.me.meth = LOCATE_parser___ReduceAction937___init;
+  fra.me.line = 5752;
+  fra.me.meth = LOCATE_parser___ReduceAction129___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36805 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5752 */
+  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[itpos941] = 1;
+  init_table[itpos132] = 1;
   return;
 }
-void parser___ReduceAction938___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36809;
-  fra.me.meth = LOCATE_parser___ReduceAction938___action;
+  fra.me.line = 5756;
+  fra.me.meth = LOCATE_parser___ReduceAction130___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5758 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5759 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5760 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:36819 */
+  /* ./parser//parser.nit:5761 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5762 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5763 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5764 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5765 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5767 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36819);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5767);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:36821 */
+  /* ./parser//parser.nit:5769 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36821);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5769);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:36822 */
+  /* ./parser//parser.nit:5771 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5771);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:5773 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:36823 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5773);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:36826 */
+  /* ./parser//parser.nit:5775 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:36827 */
   } else {
-    /* ./parser//parser.nit:36829 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5775);
   }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(89);
+  /* ./parser//parser.nit:5777 */
+  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, 5777);
+  }
+  /* ./parser//parser.nit:5778 */
+  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:5787 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5788 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction130____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5788);
+  }
+  REGB0 = ATTR_parser___ReduceAction130____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36836 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction938___init(val_t p0, int* init_table){
-  int itpos942 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction938].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos942]) return;
+  if (init_table[itpos133]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36838;
-  fra.me.meth = LOCATE_parser___ReduceAction938___init;
+  fra.me.line = 5791;
+  fra.me.meth = LOCATE_parser___ReduceAction130___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36838 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5791 */
+  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[itpos942] = 1;
+  init_table[itpos133] = 1;
   return;
 }
-void parser___ReduceAction939___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction131___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 = 36842;
-  fra.me.meth = LOCATE_parser___ReduceAction939___action;
+  fra.me.line = 5795;
+  fra.me.meth = LOCATE_parser___ReduceAction131___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[2] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(89);
+  /* ./parser//parser.nit:5797 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5798 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5799 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5800 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5801 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5802 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5803 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5804 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5806 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5806);
+  }
+  /* ./parser//parser.nit:5808 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5808);
+  }
+  /* ./parser//parser.nit:5810 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5810);
+  }
+  /* ./parser//parser.nit:5812 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5812);
+  }
+  /* ./parser//parser.nit:5814 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5814);
+  }
+  /* ./parser//parser.nit:5816 */
+  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, 5816);
+  }
+  /* ./parser//parser.nit:5817 */
+  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:5826 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5827 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction131____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5827);
+  }
+  REGB0 = ATTR_parser___ReduceAction131____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36852 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction939___init(val_t p0, int* init_table){
-  int itpos943 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction939].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos943]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36854;
-  fra.me.meth = LOCATE_parser___ReduceAction939___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36854 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  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[itpos943] = 1;
   return;
 }
-void parser___ReduceAction940___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
   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 = 36858;
-  fra.me.meth = LOCATE_parser___ReduceAction940___action;
+  fra.me.line = 5830;
+  fra.me.meth = LOCATE_parser___ReduceAction131___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = NEW_Array_array___Array___init();
-  fra.me.REG[2] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(89);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36867 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction940___init(val_t p0, int* init_table){
-  int itpos944 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction940].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos944]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 36869;
-  fra.me.meth = LOCATE_parser___ReduceAction940___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36869 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5830 */
+  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[itpos944] = 1;
+  init_table[itpos134] = 1;
   return;
 }
-void parser___ReduceAction941___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 36873;
-  fra.me.meth = LOCATE_parser___ReduceAction941___action;
+  fra.me.line = 5834;
+  fra.me.meth = LOCATE_parser___ReduceAction132___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36878 */
+  /* ./parser//parser.nit:5836 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5837 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5838 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5839 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5840 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5841 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5842 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5843 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5844 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5846 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36878);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5846);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(89);
+  /* ./parser//parser.nit:5848 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5848);
+  }
+  /* ./parser//parser.nit:5850 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
+  }
+  /* ./parser//parser.nit:5852 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5852);
+  }
+  /* ./parser//parser.nit:5854 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5854);
+  }
+  /* ./parser//parser.nit:5856 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5856);
+  }
+  /* ./parser//parser.nit:5858 */
+  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, 5858);
+  }
+  /* ./parser//parser.nit:5859 */
+  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:5868 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5869 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction132____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5869);
+  }
+  REGB0 = ATTR_parser___ReduceAction132____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36880 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction941___init(val_t p0, int* init_table){
-  int itpos945 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction941].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos945]) return;
+  if (init_table[itpos135]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36882;
-  fra.me.meth = LOCATE_parser___ReduceAction941___init;
+  fra.me.line = 5872;
+  fra.me.meth = LOCATE_parser___ReduceAction132___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36882 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5872 */
+  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[itpos945] = 1;
+  init_table[itpos135] = 1;
   return;
 }
-void parser___ReduceAction942___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction133___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 = 36886;
-  fra.me.meth = LOCATE_parser___ReduceAction942___action;
+  fra.me.line = 5876;
+  fra.me.meth = LOCATE_parser___ReduceAction133___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36891 */
+  /* ./parser//parser.nit:5878 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5879 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5880 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5881 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5882 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5883 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5884 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5885 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5887 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36891);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5887);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:5889 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5889);
+  }
+  /* ./parser//parser.nit:5891 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5891);
+  }
+  /* ./parser//parser.nit:5893 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5893);
+  }
+  /* ./parser//parser.nit:5895 */
+  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, 5895);
+  }
+  /* ./parser//parser.nit:5896 */
+  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:5905 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5906 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction133____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5906);
+  }
+  REGB0 = ATTR_parser___ReduceAction133____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36893 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction942___init(val_t p0, int* init_table){
-  int itpos946 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction942].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos946]) return;
+  if (init_table[itpos136]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36895;
-  fra.me.meth = LOCATE_parser___ReduceAction942___init;
+  fra.me.line = 5909;
+  fra.me.meth = LOCATE_parser___ReduceAction133___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36895 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5909 */
+  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[itpos946] = 1;
+  init_table[itpos136] = 1;
   return;
 }
-void parser___ReduceAction943___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction134___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 = 36899;
-  fra.me.meth = LOCATE_parser___ReduceAction943___action;
+  fra.me.line = 5913;
+  fra.me.meth = LOCATE_parser___ReduceAction134___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36904 */
+  /* ./parser//parser.nit:5915 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5916 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5917 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5918 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5919 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5920 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5921 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5922 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5923 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5925 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36904);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5925);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:5927 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5927);
+  }
+  /* ./parser//parser.nit:5929 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5929);
+  }
+  /* ./parser//parser.nit:5931 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5931);
+  }
+  /* ./parser//parser.nit:5933 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5933);
+  }
+  /* ./parser//parser.nit:5935 */
+  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, 5935);
+  }
+  /* ./parser//parser.nit:5936 */
+  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:5945 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5946 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction134____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5946);
+  }
+  REGB0 = ATTR_parser___ReduceAction134____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36906 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction943___init(val_t p0, int* init_table){
-  int itpos947 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction943].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos947]) return;
+  if (init_table[itpos137]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36908;
-  fra.me.meth = LOCATE_parser___ReduceAction943___init;
+  fra.me.line = 5949;
+  fra.me.meth = LOCATE_parser___ReduceAction134___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36908 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5949 */
+  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[itpos947] = 1;
+  init_table[itpos137] = 1;
   return;
 }
-void parser___ReduceAction944___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 36912;
-  fra.me.meth = LOCATE_parser___ReduceAction944___action;
+  fra.me.line = 5953;
+  fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
-  /* ./parser//parser.nit:36917 */
+  /* ./parser//parser.nit:5955 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5956 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5957 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5958 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5959 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5960 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5961 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5962 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5963 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5965 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36917);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5965);
   }
-  fra.me.REG[2] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:5967 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5967);
+  }
+  /* ./parser//parser.nit:5969 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5969);
+  }
+  /* ./parser//parser.nit:5971 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5971);
+  }
+  /* ./parser//parser.nit:5973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5973);
+  }
+  /* ./parser//parser.nit:5975 */
+  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, 5975);
+  }
+  /* ./parser//parser.nit:5976 */
+  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:5985 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5986 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction135____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5986);
+  }
+  REGB0 = ATTR_parser___ReduceAction135____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36923 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction944___init(val_t p0, int* init_table){
-  int itpos948 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction944].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos948]) return;
+  if (init_table[itpos138]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36925;
-  fra.me.meth = LOCATE_parser___ReduceAction944___init;
+  fra.me.line = 5989;
+  fra.me.meth = LOCATE_parser___ReduceAction135___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36925 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:5989 */
+  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[itpos948] = 1;
+  init_table[itpos138] = 1;
   return;
 }
-void parser___ReduceAction945___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction136___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 = 36929;
-  fra.me.meth = LOCATE_parser___ReduceAction945___action;
+  fra.me.line = 5993;
+  fra.me.meth = LOCATE_parser___ReduceAction136___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5995 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5996 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36935 */
+  /* ./parser//parser.nit:5997 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5998 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5999 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6000 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6001 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6002 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6003 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6004 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6006 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6006);
+  }
+  /* ./parser//parser.nit:6008 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36935);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6008);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36937 */
+  /* ./parser//parser.nit:6010 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36937);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6010);
   }
-  fra.me.REG[2] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6012 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6012);
+  }
+  /* ./parser//parser.nit:6014 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6014);
+  }
+  /* ./parser//parser.nit:6016 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6016);
+  }
+  /* ./parser//parser.nit:6018 */
+  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, 6018);
+  }
+  /* ./parser//parser.nit:6019 */
+  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:6028 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6029 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction136____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6029);
+  }
+  REGB0 = ATTR_parser___ReduceAction136____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36943 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction945___init(val_t p0, int* init_table){
-  int itpos949 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction945].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos949]) return;
+  if (init_table[itpos139]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36945;
-  fra.me.meth = LOCATE_parser___ReduceAction945___init;
+  fra.me.line = 6032;
+  fra.me.meth = LOCATE_parser___ReduceAction136___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36945 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6032 */
+  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[itpos949] = 1;
+  init_table[itpos139] = 1;
   return;
 }
-void parser___ReduceAction946___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction137___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 = 36949;
-  fra.me.meth = LOCATE_parser___ReduceAction946___action;
+  fra.me.line = 6036;
+  fra.me.meth = LOCATE_parser___ReduceAction137___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
-  /* ./parser//parser.nit:36954 */
+  /* ./parser//parser.nit:6038 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6039 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6040 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6041 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6042 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6043 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6045 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36954);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6045);
   }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6047 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6047);
+  }
+  /* ./parser//parser.nit:6049 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6049);
+  }
+  /* ./parser//parser.nit:6051 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6051);
+  }
+  /* ./parser//parser.nit:6053 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6053);
+  }
+  /* ./parser//parser.nit:6054 */
+  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:6062 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6063 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction137____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6063);
+  }
+  REGB0 = ATTR_parser___ReduceAction137____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36961 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction946___init(val_t p0, int* init_table){
-  int itpos950 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction946].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos950]) return;
+  if (init_table[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36963;
-  fra.me.meth = LOCATE_parser___ReduceAction946___init;
+  fra.me.line = 6066;
+  fra.me.meth = LOCATE_parser___ReduceAction137___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36963 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6066 */
+  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[itpos950] = 1;
+  init_table[itpos140] = 1;
   return;
 }
-void parser___ReduceAction947___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction138___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 = 36967;
-  fra.me.meth = LOCATE_parser___ReduceAction947___action;
+  fra.me.line = 6070;
+  fra.me.meth = LOCATE_parser___ReduceAction138___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6072 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36973 */
+  /* ./parser//parser.nit:6074 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6075 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6076 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6077 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6078 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6080 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36973);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6080);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:36975 */
+  /* ./parser//parser.nit:6082 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36975);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6082);
   }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6084 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6084);
+  }
+  /* ./parser//parser.nit:6086 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6086);
+  }
+  /* ./parser//parser.nit:6088 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6088);
+  }
+  /* ./parser//parser.nit:6090 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6090);
+  }
+  /* ./parser//parser.nit:6091 */
+  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:6099 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6100 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction138____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6100);
+  }
+  REGB0 = ATTR_parser___ReduceAction138____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:36982 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction947___init(val_t p0, int* init_table){
-  int itpos951 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction947].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos951]) return;
+  if (init_table[itpos141]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 36984;
-  fra.me.meth = LOCATE_parser___ReduceAction947___init;
+  fra.me.line = 6103;
+  fra.me.meth = LOCATE_parser___ReduceAction138___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:36984 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6103 */
+  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[itpos951] = 1;
+  init_table[itpos141] = 1;
   return;
 }
-void parser___ReduceAction948___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[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 = 36988;
-  fra.me.meth = LOCATE_parser___ReduceAction948___action;
+  fra.me.line = 6107;
+  fra.me.meth = LOCATE_parser___ReduceAction139___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -98817,61 +20207,64 @@ void parser___ReduceAction948___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6109 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6110 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:36994 */
+  /* ./parser//parser.nit:6112 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36994);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6112);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:36996 */
+  /* ./parser//parser.nit:6113 */
+  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6117 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6118 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction139____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 36996);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6118);
   }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction139____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37003 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction948___init(val_t p0, int* init_table){
-  int itpos952 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction948].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos952]) return;
+  if (init_table[itpos142]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37005;
-  fra.me.meth = LOCATE_parser___ReduceAction948___init;
+  fra.me.line = 6121;
+  fra.me.meth = LOCATE_parser___ReduceAction139___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37005 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6121 */
+  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[itpos952] = 1;
+  init_table[itpos142] = 1;
   return;
 }
-void parser___ReduceAction949___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[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 = 37009;
-  fra.me.meth = LOCATE_parser___ReduceAction949___action;
+  fra.me.line = 6125;
+  fra.me.meth = LOCATE_parser___ReduceAction140___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -98881,1378 +20274,1294 @@ void parser___ReduceAction949___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6127 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6128 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6129 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:37016 */
+  /* ./parser//parser.nit:6131 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37016);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6131);
   }
-  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:37018 */
+  /* ./parser//parser.nit:6133 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37018);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6133);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37020 */
+  /* ./parser//parser.nit:6134 */
+  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6138 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6139 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction140____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37020);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6139);
   }
-  fra.me.REG[2] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction140____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37027 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction949___init(val_t p0, int* init_table){
-  int itpos953 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction949].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos953]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 37029;
-  fra.me.meth = LOCATE_parser___ReduceAction949___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37029 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  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[itpos953] = 1;
   return;
 }
-void parser___ReduceAction950___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 37033;
-  fra.me.meth = LOCATE_parser___ReduceAction950___action;
+  fra.me.line = 6142;
+  fra.me.meth = LOCATE_parser___ReduceAction140___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
-  /* ./parser//parser.nit:37038 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37038);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37043 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction950___init(val_t p0, int* init_table){
-  int itpos954 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction950].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos954]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 37045;
-  fra.me.meth = LOCATE_parser___ReduceAction950___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37045 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6142 */
+  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[itpos954] = 1;
+  init_table[itpos143] = 1;
   return;
 }
-void parser___ReduceAction951___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction141___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 = 37049;
-  fra.me.meth = LOCATE_parser___ReduceAction951___action;
+  fra.me.line = 6146;
+  fra.me.meth = LOCATE_parser___ReduceAction141___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
-  /* ./parser//parser.nit:37054 */
+  /* ./parser//parser.nit:6148 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6149 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6151 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37054);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6151);
   }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6152 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6157 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6158 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction141____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6158);
+  }
+  REGB0 = ATTR_parser___ReduceAction141____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37061 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction951___init(val_t p0, int* init_table){
-  int itpos955 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction951].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos955]) return;
+  if (init_table[itpos144]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37063;
-  fra.me.meth = LOCATE_parser___ReduceAction951___init;
+  fra.me.line = 6161;
+  fra.me.meth = LOCATE_parser___ReduceAction141___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37063 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6161 */
+  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[itpos955] = 1;
+  init_table[itpos144] = 1;
   return;
 }
-void parser___ReduceAction952___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction142___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 = 37067;
-  fra.me.meth = LOCATE_parser___ReduceAction952___action;
+  fra.me.line = 6165;
+  fra.me.meth = LOCATE_parser___ReduceAction142___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6167 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:37073 */
+  /* ./parser//parser.nit:6169 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6171 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37073);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6171);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:37075 */
+  /* ./parser//parser.nit:6173 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37075);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6173);
   }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6174 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6179 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6180 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction142____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6180);
+  }
+  REGB0 = ATTR_parser___ReduceAction142____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37082 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction952___init(val_t p0, int* init_table){
-  int itpos956 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction952].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos956]) return;
+  if (init_table[itpos145]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37084;
-  fra.me.meth = LOCATE_parser___ReduceAction952___init;
+  fra.me.line = 6183;
+  fra.me.meth = LOCATE_parser___ReduceAction142___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37084 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6183 */
+  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[itpos956] = 1;
+  init_table[itpos145] = 1;
   return;
 }
-void parser___ReduceAction953___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction143___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 = 37088;
-  fra.me.meth = LOCATE_parser___ReduceAction953___action;
+  fra.me.line = 6187;
+  fra.me.meth = LOCATE_parser___ReduceAction143___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6189 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6190 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:37094 */
+  /* ./parser//parser.nit:6191 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6193 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37094);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6193);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37096 */
+  /* ./parser//parser.nit:6195 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37096);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6195);
   }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6196 */
+  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6201 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6202 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction143____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6202);
+  }
+  REGB0 = ATTR_parser___ReduceAction143____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37103 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction953___init(val_t p0, int* init_table){
-  int itpos957 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction953].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos957]) return;
+  if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37105;
-  fra.me.meth = LOCATE_parser___ReduceAction953___init;
+  fra.me.line = 6205;
+  fra.me.meth = LOCATE_parser___ReduceAction143___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37105 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6205 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos957] = 1;
+  init_table[itpos146] = 1;
   return;
 }
-void parser___ReduceAction954___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction144___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 = 37109;
-  fra.me.meth = LOCATE_parser___ReduceAction954___action;
+  fra.me.line = 6209;
+  fra.me.meth = LOCATE_parser___ReduceAction144___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6211 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6212 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6213 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:37116 */
+  /* ./parser//parser.nit:6214 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6216 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37116);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6216);
   }
-  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:37118 */
+  /* ./parser//parser.nit:6218 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37118);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6218);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37120 */
+  /* ./parser//parser.nit:6220 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37120);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6220);
   }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6221 */
+  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:6226 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6227 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction144____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6227);
+  }
+  REGB0 = ATTR_parser___ReduceAction144____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37127 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction954___init(val_t p0, int* init_table){
-  int itpos958 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction954].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos958]) return;
+  if (init_table[itpos147]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37129;
-  fra.me.meth = LOCATE_parser___ReduceAction954___init;
+  fra.me.line = 6230;
+  fra.me.meth = LOCATE_parser___ReduceAction144___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37129 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6230 */
+  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[itpos958] = 1;
+  init_table[itpos147] = 1;
   return;
 }
-void parser___ReduceAction955___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction145___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 = 37133;
-  fra.me.meth = LOCATE_parser___ReduceAction955___action;
+  fra.me.line = 6234;
+  fra.me.meth = LOCATE_parser___ReduceAction145___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37138 */
+  /* ./parser//parser.nit:6236 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6237 */
+  fra.me.REG[3] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
+  /* ./parser//parser.nit:6239 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6240 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction145____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37138);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6240);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction145____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37140 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction955___init(val_t p0, int* init_table){
-  int itpos959 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction955].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos959]) return;
+  if (init_table[itpos148]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37142;
-  fra.me.meth = LOCATE_parser___ReduceAction955___init;
+  fra.me.line = 6243;
+  fra.me.meth = LOCATE_parser___ReduceAction145___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37142 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6243 */
+  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[itpos959] = 1;
+  init_table[itpos148] = 1;
   return;
 }
-void parser___ReduceAction956___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction146___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 = 37146;
-  fra.me.meth = LOCATE_parser___ReduceAction956___action;
+  fra.me.line = 6247;
+  fra.me.meth = LOCATE_parser___ReduceAction146___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37151 */
+  /* ./parser//parser.nit:6249 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6250 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6251 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6253 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37151);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6253);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6254 */
+  fra.me.REG[3] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6257 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6258 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction146____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6258);
+  }
+  REGB0 = ATTR_parser___ReduceAction146____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37153 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction956___init(val_t p0, int* init_table){
-  int itpos960 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction956].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos960]) return;
+  if (init_table[itpos149]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37155;
-  fra.me.meth = LOCATE_parser___ReduceAction956___init;
+  fra.me.line = 6261;
+  fra.me.meth = LOCATE_parser___ReduceAction146___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37155 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6261 */
+  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[itpos960] = 1;
+  init_table[itpos149] = 1;
   return;
 }
-void parser___ReduceAction957___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction147___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 = 37159;
-  fra.me.meth = LOCATE_parser___ReduceAction957___action;
+  fra.me.line = 6265;
+  fra.me.meth = LOCATE_parser___ReduceAction147___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37164 */
+  /* ./parser//parser.nit:6267 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6268 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6269 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6271 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37164);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6271);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6272 */
+  fra.me.REG[3] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6275 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6276 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction147____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6276);
+  }
+  REGB0 = ATTR_parser___ReduceAction147____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37166 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction957___init(val_t p0, int* init_table){
-  int itpos961 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction957].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos961]) return;
+  if (init_table[itpos150]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37168;
-  fra.me.meth = LOCATE_parser___ReduceAction957___init;
+  fra.me.line = 6279;
+  fra.me.meth = LOCATE_parser___ReduceAction147___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37168 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6279 */
+  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[itpos961] = 1;
+  init_table[itpos150] = 1;
   return;
 }
-void parser___ReduceAction958___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction148___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 = 37172;
-  fra.me.meth = LOCATE_parser___ReduceAction958___action;
+  fra.me.line = 6283;
+  fra.me.meth = LOCATE_parser___ReduceAction148___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37177 */
+  /* ./parser//parser.nit:6285 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6286 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6287 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6289 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37177);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6289);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6290 */
+  fra.me.REG[3] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6293 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6294 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction148____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6294);
+  }
+  REGB0 = ATTR_parser___ReduceAction148____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37179 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction958___init(val_t p0, int* init_table){
-  int itpos962 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction958].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos962]) return;
+  if (init_table[itpos151]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37181;
-  fra.me.meth = LOCATE_parser___ReduceAction958___init;
+  fra.me.line = 6297;
+  fra.me.meth = LOCATE_parser___ReduceAction148___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37181 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6297 */
+  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[itpos962] = 1;
+  init_table[itpos151] = 1;
   return;
 }
-void parser___ReduceAction959___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction149___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 = 37185;
-  fra.me.meth = LOCATE_parser___ReduceAction959___action;
+  fra.me.line = 6301;
+  fra.me.meth = LOCATE_parser___ReduceAction149___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37190 */
+  /* ./parser//parser.nit:6303 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6304 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6306 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37190);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6306);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6307 */
+  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6310 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6311 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction149____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6311);
+  }
+  REGB0 = ATTR_parser___ReduceAction149____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37192 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction959___init(val_t p0, int* init_table){
-  int itpos963 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction959].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos963]) return;
+  if (init_table[itpos152]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37194;
-  fra.me.meth = LOCATE_parser___ReduceAction959___init;
+  fra.me.line = 6314;
+  fra.me.meth = LOCATE_parser___ReduceAction149___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37194 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6314 */
+  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[itpos963] = 1;
+  init_table[itpos152] = 1;
   return;
 }
-void parser___ReduceAction960___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction150___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 = 37198;
-  fra.me.meth = LOCATE_parser___ReduceAction960___action;
+  fra.me.line = 6318;
+  fra.me.meth = LOCATE_parser___ReduceAction150___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37203 */
+  /* ./parser//parser.nit:6320 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6321 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6323 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37203);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6323);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(90);
+  /* ./parser//parser.nit:6324 */
+  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6327 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6328 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction150____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6328);
+  }
+  REGB0 = ATTR_parser___ReduceAction150____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37205 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction960___init(val_t p0, int* init_table){
-  int itpos964 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction960].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos964]) return;
+  if (init_table[itpos153]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37207;
-  fra.me.meth = LOCATE_parser___ReduceAction960___init;
+  fra.me.line = 6331;
+  fra.me.meth = LOCATE_parser___ReduceAction150___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37207 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6331 */
+  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[itpos964] = 1;
+  init_table[itpos153] = 1;
   return;
 }
-void parser___ReduceAction961___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction151___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 = 37211;
-  fra.me.meth = LOCATE_parser___ReduceAction961___action;
+  fra.me.line = 6335;
+  fra.me.meth = LOCATE_parser___ReduceAction151___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6337 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6338 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:37222 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37222);
-    nit_exit(1);
-  }
-  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:37224 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37224);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37226 */
+  /* ./parser//parser.nit:6340 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37226);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6340);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:37228 */
+  /* ./parser//parser.nit:6341 */
+  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6344 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6345 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction151____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:37229 */
   } else {
-    /* ./parser//parser.nit:37231 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6345);
   }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction151____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37241 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction961___init(val_t p0, int* init_table){
-  int itpos965 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction961].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos965]) return;
+  if (init_table[itpos154]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37243;
-  fra.me.meth = LOCATE_parser___ReduceAction961___init;
+  fra.me.line = 6348;
+  fra.me.meth = LOCATE_parser___ReduceAction151___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37243 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6348 */
+  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[itpos965] = 1;
+  init_table[itpos154] = 1;
   return;
 }
-void parser___ReduceAction962___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction152___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 = 37247;
-  fra.me.meth = LOCATE_parser___ReduceAction962___action;
+  fra.me.line = 6352;
+  fra.me.meth = LOCATE_parser___ReduceAction152___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6354 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6355 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:37257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37257);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37259 */
+  /* ./parser//parser.nit:6357 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37259);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6357);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:37261 */
+  /* ./parser//parser.nit:6358 */
+  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6361 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6362 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction152____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:37262 */
   } else {
-    /* ./parser//parser.nit:37264 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6362);
   }
-  fra.me.REG[5] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction152____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37274 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction962___init(val_t p0, int* init_table){
-  int itpos966 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction962].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos966]) return;
+  if (init_table[itpos155]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37276;
-  fra.me.meth = LOCATE_parser___ReduceAction962___init;
+  fra.me.line = 6365;
+  fra.me.meth = LOCATE_parser___ReduceAction152___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37276 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6365 */
+  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[itpos966] = 1;
+  init_table[itpos155] = 1;
   return;
 }
-void parser___ReduceAction963___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction153___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 = 37280;
-  fra.me.meth = LOCATE_parser___ReduceAction963___action;
+  fra.me.line = 6369;
+  fra.me.meth = LOCATE_parser___ReduceAction153___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6371 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6372 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:37292 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37292);
-    nit_exit(1);
-  }
-  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:37294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37294);
-    nit_exit(1);
-  }
-  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:37296 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37296);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:37298 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:37299 */
-  } else {
-    /* ./parser//parser.nit:37301 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37305 */
+  /* ./parser//parser.nit:6374 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37305);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6374);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:37307 */
+  /* ./parser//parser.nit:6375 */
+  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6378 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6379 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction153____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:37308 */
   } else {
-    /* ./parser//parser.nit:37310 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6379);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction153____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37320 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction963___init(val_t p0, int* init_table){
-  int itpos967 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction963].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos967]) return;
+  if (init_table[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37322;
-  fra.me.meth = LOCATE_parser___ReduceAction963___init;
+  fra.me.line = 6382;
+  fra.me.meth = LOCATE_parser___ReduceAction153___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37322 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6382 */
+  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[itpos967] = 1;
+  init_table[itpos156] = 1;
   return;
 }
-void parser___ReduceAction964___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction154___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 = 37326;
-  fra.me.meth = LOCATE_parser___ReduceAction964___action;
+  fra.me.line = 6386;
+  fra.me.meth = LOCATE_parser___ReduceAction154___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6388 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:37337 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37337);
-    nit_exit(1);
-  }
-  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:37339 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37339);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:37341 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:37342 */
-  } else {
-    /* ./parser//parser.nit:37344 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37348 */
+  /* ./parser//parser.nit:6391 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37348);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6391);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:37350 */
+  /* ./parser//parser.nit:6392 */
+  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6395 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6396 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction154____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:37351 */
   } else {
-    /* ./parser//parser.nit:37353 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6396);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction154____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37363 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction964___init(val_t p0, int* init_table){
-  int itpos968 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction964].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos968]) return;
+  if (init_table[itpos157]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37365;
-  fra.me.meth = LOCATE_parser___ReduceAction964___init;
+  fra.me.line = 6399;
+  fra.me.meth = LOCATE_parser___ReduceAction154___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37365 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6399 */
+  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[itpos968] = 1;
+  init_table[itpos157] = 1;
   return;
 }
-void parser___ReduceAction965___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction155___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 = 37369;
-  fra.me.meth = LOCATE_parser___ReduceAction965___action;
+  fra.me.line = 6403;
+  fra.me.meth = LOCATE_parser___ReduceAction155___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6405 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6406 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:37376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37376);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37378 */
+  /* ./parser//parser.nit:6408 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37378);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6408);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:37380 */
+  /* ./parser//parser.nit:6409 */
+  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6412 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6413 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction155____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:37381 */
   } else {
-    /* ./parser//parser.nit:37383 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6413);
   }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction155____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37392 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction965___init(val_t p0, int* init_table){
-  int itpos969 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction965].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos969]) return;
+  if (init_table[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37394;
-  fra.me.meth = LOCATE_parser___ReduceAction965___init;
+  fra.me.line = 6416;
+  fra.me.meth = LOCATE_parser___ReduceAction155___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37394 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6416 */
+  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[itpos969] = 1;
+  init_table[itpos158] = 1;
   return;
 }
-void parser___ReduceAction966___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction156___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 = 37398;
-  fra.me.meth = LOCATE_parser___ReduceAction966___action;
+  fra.me.line = 6420;
+  fra.me.meth = LOCATE_parser___ReduceAction156___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6422 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:37406 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37406);
-    nit_exit(1);
-  }
-  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:37408 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37408);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37410 */
+  /* ./parser//parser.nit:6425 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37410);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6425);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:37412 */
+  /* ./parser//parser.nit:6426 */
+  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6429 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6430 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction156____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:37413 */
   } else {
-    /* ./parser//parser.nit:37415 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6430);
   }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction156____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37424 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction966___init(val_t p0, int* init_table){
-  int itpos970 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction966].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos970]) return;
+  if (init_table[itpos159]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37426;
-  fra.me.meth = LOCATE_parser___ReduceAction966___init;
+  fra.me.line = 6433;
+  fra.me.meth = LOCATE_parser___ReduceAction156___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37426 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6433 */
+  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[itpos970] = 1;
+  init_table[itpos159] = 1;
   return;
 }
-void parser___ReduceAction967___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction157___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 = 37430;
-  fra.me.meth = LOCATE_parser___ReduceAction967___action;
+  fra.me.line = 6437;
+  fra.me.meth = LOCATE_parser___ReduceAction157___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6439 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6440 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:37440 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37440);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:37442 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37442);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37444 */
+  /* ./parser//parser.nit:6442 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37444);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6442);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:37446 */
+  /* ./parser//parser.nit:6443 */
+  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6446 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6447 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction157____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:37447 */
   } else {
-    /* ./parser//parser.nit:37449 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6447);
   }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction157____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37458 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction967___init(val_t p0, int* init_table){
-  int itpos971 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction967].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos971]) return;
+  if (init_table[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37460;
-  fra.me.meth = LOCATE_parser___ReduceAction967___init;
+  fra.me.line = 6450;
+  fra.me.meth = LOCATE_parser___ReduceAction157___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37460 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6450 */
+  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[itpos971] = 1;
+  init_table[itpos160] = 1;
   return;
 }
-void parser___ReduceAction968___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction158___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 = 37464;
-  fra.me.meth = LOCATE_parser___ReduceAction968___action;
+  fra.me.line = 6454;
+  fra.me.meth = LOCATE_parser___ReduceAction158___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6456 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6457 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:37473 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37473);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37475 */
+  /* ./parser//parser.nit:6459 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37475);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6459);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:37477 */
+  /* ./parser//parser.nit:6460 */
+  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6463 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6464 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction158____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:37478 */
   } else {
-    /* ./parser//parser.nit:37480 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6464);
   }
-  fra.me.REG[4] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(90);
+  REGB0 = ATTR_parser___ReduceAction158____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37489 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction968___init(val_t p0, int* init_table){
-  int itpos972 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction968].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos972]) return;
+  if (init_table[itpos161]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37491;
-  fra.me.meth = LOCATE_parser___ReduceAction968___init;
+  fra.me.line = 6467;
+  fra.me.meth = LOCATE_parser___ReduceAction158___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37491 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6467 */
+  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[itpos972] = 1;
+  init_table[itpos161] = 1;
   return;
 }
-void parser___ReduceAction969___action(val_t p0, val_t p1){
+void parser___ReduceAction159___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37495;
-  fra.me.meth = LOCATE_parser___ReduceAction969___action;
+  fra.me.line = 6471;
+  fra.me.meth = LOCATE_parser___ReduceAction159___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -100261,835 +21570,562 @@ void parser___ReduceAction969___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast nullable AClosureDef*/;
-  /* ./parser//parser.nit:37501 */
+  /* ./parser//parser.nit:6473 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6474 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6476 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37501);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6476);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:37502 */
+  /* ./parser//parser.nit:6477 */
+  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6480 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6481 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction159____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37503 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6481);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(91);
+  REGB0 = ATTR_parser___ReduceAction159____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37506 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction969___init(val_t p0, int* init_table){
-  int itpos973 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction969].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos973]) return;
+  if (init_table[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37508;
-  fra.me.meth = LOCATE_parser___ReduceAction969___init;
+  fra.me.line = 6484;
+  fra.me.meth = LOCATE_parser___ReduceAction159___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37508 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6484 */
+  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[itpos973] = 1;
+  init_table[itpos162] = 1;
   return;
 }
-void parser___ReduceAction970___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37512;
-  fra.me.meth = LOCATE_parser___ReduceAction970___action;
+  fra.me.line = 6488;
+  fra.me.meth = LOCATE_parser___ReduceAction160___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6490 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6491 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureDef, ID_AClosureDef)) /*cast nullable AClosureDef*/;
-  /* ./parser//parser.nit:37519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37519);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37521);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:37522 */
+  /* ./parser//parser.nit:6493 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37523 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6493);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:37526 */
+  /* ./parser//parser.nit:6494 */
+  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6497 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6498 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction160____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:37527 */
   } else {
-    /* ./parser//parser.nit:37529 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6498);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(91);
+  REGB0 = ATTR_parser___ReduceAction160____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37533 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction970___init(val_t p0, int* init_table){
-  int itpos974 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction970].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos974]) return;
+  if (init_table[itpos163]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37535;
-  fra.me.meth = LOCATE_parser___ReduceAction970___init;
+  fra.me.line = 6501;
+  fra.me.meth = LOCATE_parser___ReduceAction160___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37535 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6501 */
+  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[itpos974] = 1;
+  init_table[itpos163] = 1;
   return;
 }
-void parser___ReduceAction971___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction161___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37539;
-  fra.me.meth = LOCATE_parser___ReduceAction971___action;
+  fra.me.line = 6505;
+  fra.me.meth = LOCATE_parser___ReduceAction161___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6507 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6508 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:37551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37551);
-    nit_exit(1);
-  }
-  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:37553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37553);
-    nit_exit(1);
-  }
-  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:37555 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37555);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37558 */
+  /* ./parser//parser.nit:6510 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLl, ID_TLl)) /*cast nullable TLl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37558);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6510);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:37559 */
+  /* ./parser//parser.nit:6511 */
+  fra.me.REG[3] = NEW_ALlMethid_parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6514 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6515 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction161____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6515);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37560 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
-  }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction161____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37574 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction971___init(val_t p0, int* init_table){
-  int itpos975 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction971].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos975]) return;
+  if (init_table[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37576;
-  fra.me.meth = LOCATE_parser___ReduceAction971___init;
+  fra.me.line = 6518;
+  fra.me.meth = LOCATE_parser___ReduceAction161___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37576 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6518 */
+  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[itpos975] = 1;
+  init_table[itpos164] = 1;
   return;
 }
-void parser___ReduceAction972___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} 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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37580;
-  fra.me.meth = LOCATE_parser___ReduceAction972___action;
+  fra.me.line = 6522;
+  fra.me.meth = LOCATE_parser___ReduceAction162___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6524 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6525 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:37593 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37593);
-    nit_exit(1);
-  }
-  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:37595 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37595);
-    nit_exit(1);
-  }
-  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:37597 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37597);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:37600 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37600);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37602);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:37603 */
+  /* ./parser//parser.nit:6527 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGg, ID_TGg)) /*cast nullable TGg*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37604 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6527);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:37607 */
+  /* ./parser//parser.nit:6528 */
+  fra.me.REG[3] = NEW_AGgMethid_parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6531 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6532 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction162____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:37608 */
   } else {
-    /* ./parser//parser.nit:37610 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6532);
   }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  fra.me.REG[8] = 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[8], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction162____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37625 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction972___init(val_t p0, int* init_table){
-  int itpos976 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction972].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos976]) return;
+  if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37627;
-  fra.me.meth = LOCATE_parser___ReduceAction972___init;
+  fra.me.line = 6535;
+  fra.me.meth = LOCATE_parser___ReduceAction162___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37627 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6535 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos976] = 1;
+  init_table[itpos165] = 1;
   return;
 }
-void parser___ReduceAction973___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} 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 = 37631;
-  fra.me.meth = LOCATE_parser___ReduceAction973___action;
+  fra.me.line = 6539;
+  fra.me.meth = LOCATE_parser___ReduceAction163___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6541 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6542 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6543 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:37641 */
+  /* ./parser//parser.nit:6545 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37641);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6545);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:37643 */
+  /* ./parser//parser.nit:6547 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37643);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6547);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:37645 */
+  /* ./parser//parser.nit:6548 */
+  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6552 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6553 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction163____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37645);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6553);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction163____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37659 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction973___init(val_t p0, int* init_table){
-  int itpos977 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction973].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos977]) return;
+  if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37661;
-  fra.me.meth = LOCATE_parser___ReduceAction973___init;
+  fra.me.line = 6556;
+  fra.me.meth = LOCATE_parser___ReduceAction163___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37661 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6556 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos977] = 1;
+  init_table[itpos166] = 1;
   return;
 }
-void parser___ReduceAction974___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction164___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 = 37665;
-  fra.me.meth = LOCATE_parser___ReduceAction974___action;
+  fra.me.line = 6560;
+  fra.me.meth = LOCATE_parser___ReduceAction164___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6562 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6563 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:37674 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37674);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:37676 */
+  /* ./parser//parser.nit:6565 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37676);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6565);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:37678 */
+  /* ./parser//parser.nit:6566 */
+  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6569 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6570 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction164____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37678);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6570);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction164____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37692 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction974___init(val_t p0, int* init_table){
-  int itpos978 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction974].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos978]) return;
+  if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37694;
-  fra.me.meth = LOCATE_parser___ReduceAction974___init;
+  fra.me.line = 6573;
+  fra.me.meth = LOCATE_parser___ReduceAction164___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37694 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6573 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos978] = 1;
+  init_table[itpos167] = 1;
   return;
 }
-void parser___ReduceAction975___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction165___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 = 37698;
-  fra.me.meth = LOCATE_parser___ReduceAction975___action;
+  fra.me.line = 6577;
+  fra.me.meth = LOCATE_parser___ReduceAction165___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6579 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6580 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6581 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:37711 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37711);
-    nit_exit(1);
-  }
-  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:37713 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37713);
-    nit_exit(1);
-  }
-  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:37715 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37715);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:37717 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:37718 */
-  } else {
-    /* ./parser//parser.nit:37720 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:37724 */
+  /* ./parser//parser.nit:6583 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37724);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6583);
   }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:37727 */
+  /* ./parser//parser.nit:6585 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37727);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6585);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:37728 */
+  /* ./parser//parser.nit:6586 */
+  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6590 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6591 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction165____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37729 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6591);
   }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction165____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37743 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction975___init(val_t p0, int* init_table){
-  int itpos979 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction975].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos979]) return;
+  if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37745;
-  fra.me.meth = LOCATE_parser___ReduceAction975___init;
+  fra.me.line = 6594;
+  fra.me.meth = LOCATE_parser___ReduceAction165___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37745 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6594 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos979] = 1;
+  init_table[itpos168] = 1;
   return;
 }
-void parser___ReduceAction976___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction166___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 = 37749;
-  fra.me.meth = LOCATE_parser___ReduceAction976___action;
+  fra.me.line = 6598;
+  fra.me.meth = LOCATE_parser___ReduceAction166___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6600 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6601 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6602 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6603 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:37763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37763);
-    nit_exit(1);
-  }
-  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:37765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37765);
-    nit_exit(1);
-  }
-  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:37767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37767);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:37769 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:37770 */
-  } else {
-    /* ./parser//parser.nit:37772 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  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:37776 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37776);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:37779 */
+  /* ./parser//parser.nit:6605 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37779);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6605);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:37781 */
+  /* ./parser//parser.nit:6607 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37781);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6607);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:37782 */
+  /* ./parser//parser.nit:6609 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6609);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37783 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:37786 */
+  /* ./parser//parser.nit:6610 */
+  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:6615 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6616 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction166____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:37787 */
   } else {
-    /* ./parser//parser.nit:37789 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6616);
   }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = 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[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction166____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37804 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction976___init(val_t p0, int* init_table){
-  int itpos980 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction976].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos980]) return;
+  if (init_table[itpos169]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37806;
-  fra.me.meth = LOCATE_parser___ReduceAction976___init;
+  fra.me.line = 6619;
+  fra.me.meth = LOCATE_parser___ReduceAction166___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37806 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6619 */
+  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[itpos980] = 1;
+  init_table[itpos169] = 1;
   return;
 }
-void parser___ReduceAction977___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[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 = 37810;
-  fra.me.meth = LOCATE_parser___ReduceAction977___action;
+  fra.me.line = 6623;
+  fra.me.meth = LOCATE_parser___ReduceAction167___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -101101,95 +22137,81 @@ void parser___ReduceAction977___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6625 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6628 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6629 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:37821 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37821);
-    nit_exit(1);
-  }
-  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:37823 */
+  /* ./parser//parser.nit:6631 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37823);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6631);
   }
+  /* ./parser//parser.nit:6633 */
   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:37825 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37825);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:37827 */
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:37828 */
   } else {
-    /* ./parser//parser.nit:37830 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6633);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:37834 */
+  /* ./parser//parser.nit:6634 */
+  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:6635 */
+  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:6640 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6641 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction167____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37834);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6641);
   }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  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[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction167____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37848 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction977___init(val_t p0, int* init_table){
-  int itpos981 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction977].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos981]) return;
+  if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37850;
-  fra.me.meth = LOCATE_parser___ReduceAction977___init;
+  fra.me.line = 6644;
+  fra.me.meth = LOCATE_parser___ReduceAction167___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37850 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6644 */
+  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[itpos981] = 1;
+  init_table[itpos170] = 1;
   return;
 }
-void parser___ReduceAction978___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction168___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 = 37854;
-  fra.me.meth = LOCATE_parser___ReduceAction978___action;
+  fra.me.line = 6648;
+  fra.me.meth = LOCATE_parser___ReduceAction168___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -101197,217 +22219,169 @@ void parser___ReduceAction978___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6650 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6651 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6652 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6653 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6654 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:37864 */
+  /* ./parser//parser.nit:6655 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6657 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37864);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6657);
   }
-  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:37866 */
+  /* ./parser//parser.nit:6658 */
+  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:6660 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37866);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6660);
   }
+  /* ./parser//parser.nit:6662 */
   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:37868 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37868);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6662);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:37870 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:37871 */
-  } else {
-    /* ./parser//parser.nit:37873 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:37877 */
+  /* ./parser//parser.nit:6663 */
+  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:6664 */
+  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:6669 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:6670 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction168____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37877);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6670);
   }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  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[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction168____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37891 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction978___init(val_t p0, int* init_table){
-  int itpos982 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction978].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos982]) return;
+  if (init_table[itpos171]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37893;
-  fra.me.meth = LOCATE_parser___ReduceAction978___init;
+  fra.me.line = 6673;
+  fra.me.meth = LOCATE_parser___ReduceAction168___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37893 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6673 */
+  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[itpos982] = 1;
+  init_table[itpos171] = 1;
   return;
 }
-void parser___ReduceAction979___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction169___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 = 37897;
-  fra.me.meth = LOCATE_parser___ReduceAction979___action;
+  fra.me.line = 6677;
+  fra.me.meth = LOCATE_parser___ReduceAction169___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6679 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6681 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:37910 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37910);
-    nit_exit(1);
-  }
-  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:37912 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37912);
-    nit_exit(1);
-  }
-  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:37914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37914);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:37917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37917);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:37918 */
+  /* ./parser//parser.nit:6682 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6683 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6685 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6685);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37919 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
-  }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:37925 */
+  /* ./parser//parser.nit:6686 */
+  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:6691 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6692 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction169____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37925);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6692);
   }
-  fra.me.REG[2] = 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[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction169____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37935 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction979___init(val_t p0, int* init_table){
-  int itpos983 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction979].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos983]) return;
+  if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37937;
-  fra.me.meth = LOCATE_parser___ReduceAction979___init;
+  fra.me.line = 6695;
+  fra.me.meth = LOCATE_parser___ReduceAction169___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37937 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6695 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos983] = 1;
+  init_table[itpos172] = 1;
   return;
 }
-void parser___ReduceAction980___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction170___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 = 37941;
-  fra.me.meth = LOCATE_parser___ReduceAction980___action;
+  fra.me.line = 6699;
+  fra.me.meth = LOCATE_parser___ReduceAction170___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -101415,227 +22389,160 @@ void parser___ReduceAction980___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6701 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6702 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6703 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:37955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37955);
-    nit_exit(1);
-  }
-  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:37957 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37957);
-    nit_exit(1);
-  }
-  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:37959 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37959);
-    nit_exit(1);
-  }
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:37962 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37962);
-    nit_exit(1);
-  }
-  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:37964 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37964);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:37965 */
+  /* ./parser//parser.nit:6705 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6706 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6708 */
+  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 {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:37966 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6708);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:37969 */
+  /* ./parser//parser.nit:6709 */
+  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:6711 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:37970 */
   } else {
-    /* ./parser//parser.nit:37972 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6711);
   }
-  fra.me.REG[9] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:37979 */
+  /* ./parser//parser.nit:6712 */
+  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:6717 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6718 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction170____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 37979);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6718);
   }
-  fra.me.REG[2] = 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[9], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction170____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:37989 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction980___init(val_t p0, int* init_table){
-  int itpos984 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction980].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos984]) return;
+  if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 37991;
-  fra.me.meth = LOCATE_parser___ReduceAction980___init;
+  fra.me.line = 6721;
+  fra.me.meth = LOCATE_parser___ReduceAction170___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:37991 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6721 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos984] = 1;
+  init_table[itpos173] = 1;
   return;
 }
-void parser___ReduceAction981___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction171___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 = 37995;
-  fra.me.meth = LOCATE_parser___ReduceAction981___action;
+  fra.me.line = 6725;
+  fra.me.meth = LOCATE_parser___ReduceAction171___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6727 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38006);
-    nit_exit(1);
-  }
-  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:38008 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38008);
-    nit_exit(1);
-  }
-  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:38010 */
+  /* ./parser//parser.nit:6729 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6730 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6732 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38010);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6732);
   }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38016 */
+  /* ./parser//parser.nit:6733 */
+  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:6734 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:6739 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6740 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction171____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38016);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6740);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction171____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38026 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction981___init(val_t p0, int* init_table){
-  int itpos985 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction981].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos985]) return;
+  if (init_table[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38028;
-  fra.me.meth = LOCATE_parser___ReduceAction981___init;
+  fra.me.line = 6743;
+  fra.me.meth = LOCATE_parser___ReduceAction171___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38028 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6743 */
+  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[itpos985] = 1;
+  init_table[itpos174] = 1;
   return;
 }
-void parser___ReduceAction982___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction172___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 = 38032;
-  fra.me.meth = LOCATE_parser___ReduceAction982___action;
+  fra.me.line = 6747;
+  fra.me.meth = LOCATE_parser___ReduceAction172___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -101643,683 +22550,438 @@ void parser___ReduceAction982___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6749 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6750 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6751 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6752 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6753 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38042 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38042);
-    nit_exit(1);
-  }
-  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:38044 */
+  /* ./parser//parser.nit:6755 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38044);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6755);
   }
-  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:38046 */
+  /* ./parser//parser.nit:6756 */
+  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:6758 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38046);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6758);
   }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38052 */
+  /* ./parser//parser.nit:6759 */
+  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:6760 */
+  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
+  /* ./parser//parser.nit:6765 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6766 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction172____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38052);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6766);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction172____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38062 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction982___init(val_t p0, int* init_table){
-  int itpos986 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction982].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos986]) return;
+  if (init_table[itpos175]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38064;
-  fra.me.meth = LOCATE_parser___ReduceAction982___init;
+  fra.me.line = 6769;
+  fra.me.meth = LOCATE_parser___ReduceAction172___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38064 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6769 */
+  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[itpos986] = 1;
+  init_table[itpos175] = 1;
   return;
 }
-void parser___ReduceAction983___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction173___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 = 38068;
-  fra.me.meth = LOCATE_parser___ReduceAction983___action;
+  fra.me.line = 6773;
+  fra.me.meth = LOCATE_parser___ReduceAction173___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6775 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6776 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:38082 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38082);
-    nit_exit(1);
-  }
-  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:38084 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38084);
-    nit_exit(1);
-  }
-  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:38086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38086);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:38088 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:38089 */
-  } else {
-    /* ./parser//parser.nit:38091 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
-  }
-  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:38095 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38095);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:38098 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38098);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:38099 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:38100 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-  }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38106 */
+  /* ./parser//parser.nit:6777 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6778 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6779 */
+  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* ./parser//parser.nit:6784 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:6785 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction173____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38106);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6785);
   }
-  fra.me.REG[2] = 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[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction173____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38116 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction983___init(val_t p0, int* init_table){
-  int itpos987 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction983].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos987]) return;
+  if (init_table[itpos176]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38118;
-  fra.me.meth = LOCATE_parser___ReduceAction983___init;
+  fra.me.line = 6788;
+  fra.me.meth = LOCATE_parser___ReduceAction173___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38118 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6788 */
+  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[itpos987] = 1;
+  init_table[itpos176] = 1;
   return;
 }
-void parser___ReduceAction984___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction174___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 = 38122;
-  fra.me.meth = LOCATE_parser___ReduceAction984___action;
+  fra.me.line = 6792;
+  fra.me.meth = LOCATE_parser___ReduceAction174___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6794 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6795 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:38137 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38137);
-    nit_exit(1);
-  }
-  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:38139 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38139);
-    nit_exit(1);
-  }
-  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:38141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38141);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:38143 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[6];
-  /* ./parser//parser.nit:38144 */
-  } else {
-    /* ./parser//parser.nit:38146 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
-  }
-  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:38150 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38150);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38153 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38153);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:6797 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6798 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6800 */
   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:38155 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38155);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:38156 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:38157 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38160 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:38161 */
   } else {
-    /* ./parser//parser.nit:38163 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6800);
   }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38170 */
+  /* ./parser//parser.nit:6801 */
+  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:6802 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:6807 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6808 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction174____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38170);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6808);
   }
-  fra.me.REG[2] = 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[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction174____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38180 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction984___init(val_t p0, int* init_table){
-  int itpos988 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction984].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos988]) return;
+  if (init_table[itpos177]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38182;
-  fra.me.meth = LOCATE_parser___ReduceAction984___init;
+  fra.me.line = 6811;
+  fra.me.meth = LOCATE_parser___ReduceAction174___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38182 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6811 */
+  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[itpos988] = 1;
+  init_table[itpos177] = 1;
   return;
 }
-void parser___ReduceAction985___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction175___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 = 38186;
-  fra.me.meth = LOCATE_parser___ReduceAction985___action;
+  fra.me.line = 6815;
+  fra.me.meth = LOCATE_parser___ReduceAction175___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:38198 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38198);
-    nit_exit(1);
-  }
-  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:38200 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38200);
-    nit_exit(1);
-  }
-  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:38202 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38202);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:38204 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:38205 */
-  } else {
-    /* ./parser//parser.nit:38207 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:38211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38211);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:6817 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6818 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6819 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38217 */
+  /* ./parser//parser.nit:6820 */
+  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* ./parser//parser.nit:6825 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:6826 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction175____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38217);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6826);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction175____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38227 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction985___init(val_t p0, int* init_table){
-  int itpos989 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction985].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos989]) return;
+  if (init_table[itpos178]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38229;
-  fra.me.meth = LOCATE_parser___ReduceAction985___init;
+  fra.me.line = 6829;
+  fra.me.meth = LOCATE_parser___ReduceAction175___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38229 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6829 */
+  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[itpos989] = 1;
+  init_table[itpos178] = 1;
   return;
 }
-void parser___ReduceAction986___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction176___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 = 38233;
-  fra.me.meth = LOCATE_parser___ReduceAction986___action;
+  fra.me.line = 6833;
+  fra.me.meth = LOCATE_parser___ReduceAction176___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6835 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:38244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38244);
-    nit_exit(1);
-  }
-  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:38246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38246);
-    nit_exit(1);
-  }
-  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:38248 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38248);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:38250 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:38251 */
-  } else {
-    /* ./parser//parser.nit:38253 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-  }
-  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:38257 */
+  /* ./parser//parser.nit:6837 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6838 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6840 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38257);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6840);
   }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:38263 */
+  /* ./parser//parser.nit:6841 */
+  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:6842 */
+  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:6847 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6848 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction176____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38263);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6848);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction176____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38273 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction986___init(val_t p0, int* init_table){
-  int itpos990 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction986].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos990]) return;
+  if (init_table[itpos179]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38275;
-  fra.me.meth = LOCATE_parser___ReduceAction986___init;
+  fra.me.line = 6851;
+  fra.me.meth = LOCATE_parser___ReduceAction176___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38275 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6851 */
+  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[itpos990] = 1;
+  init_table[itpos179] = 1;
   return;
 }
-void parser___ReduceAction987___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction177___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 = 38279;
-  fra.me.meth = LOCATE_parser___ReduceAction987___action;
+  fra.me.line = 6855;
+  fra.me.meth = LOCATE_parser___ReduceAction177___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6857 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6858 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38288);
-    nit_exit(1);
-  }
-  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:38290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38290);
-    nit_exit(1);
-  }
-  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:38292 */
+  /* ./parser//parser.nit:6859 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6860 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6862 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38292);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6862);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38294 */
+  /* ./parser//parser.nit:6863 */
+  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:6868 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6869 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction177____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38294);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6869);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction177____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38304 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction987___init(val_t p0, int* init_table){
-  int itpos991 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction987].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos991]) return;
+  if (init_table[itpos180]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38306;
-  fra.me.meth = LOCATE_parser___ReduceAction987___init;
+  fra.me.line = 6872;
+  fra.me.meth = LOCATE_parser___ReduceAction177___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38306 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6872 */
+  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[itpos991] = 1;
+  init_table[itpos180] = 1;
   return;
 }
-void parser___ReduceAction988___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction178___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 = 38310;
-  fra.me.meth = LOCATE_parser___ReduceAction988___action;
+  fra.me.line = 6876;
+  fra.me.meth = LOCATE_parser___ReduceAction178___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -102327,327 +22989,269 @@ void parser___ReduceAction988___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6878 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6879 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6880 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:38320 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38320);
-    nit_exit(1);
-  }
-  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:38322 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38322);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:6881 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6882 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6884 */
   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:38324 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38324);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:38326 */
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:38327 */
   } else {
-    /* ./parser//parser.nit:38329 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6884);
   }
-  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:38333 */
+  /* ./parser//parser.nit:6885 */
+  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:6887 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38333);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6887);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38335 */
+  /* ./parser//parser.nit:6888 */
+  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:6893 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:6894 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction178____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38335);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6894);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction178____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38345 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction988___init(val_t p0, int* init_table){
-  int itpos992 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction988].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos992]) return;
+  if (init_table[itpos181]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38347;
-  fra.me.meth = LOCATE_parser___ReduceAction988___init;
+  fra.me.line = 6897;
+  fra.me.meth = LOCATE_parser___ReduceAction178___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38347 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6897 */
+  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[itpos992] = 1;
+  init_table[itpos181] = 1;
   return;
 }
-void parser___ReduceAction989___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction179___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 = 38351;
-  fra.me.meth = LOCATE_parser___ReduceAction989___action;
+  fra.me.line = 6901;
+  fra.me.meth = LOCATE_parser___ReduceAction179___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6903 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6904 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6905 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6906 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6907 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
-  /* ./parser//parser.nit:38361 */
+  /* ./parser//parser.nit:6908 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6909 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6911 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38361);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
-  /* ./parser//parser.nit:38363 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38363);
-    nit_exit(1);
+    /* ./parser//parser.nit:6912 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38365 */
+  /* ./parser//parser.nit:6914 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:6915 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction179____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38365);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6915);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], NIT_NULL, fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction179____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38375 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction989___init(val_t p0, int* init_table){
-  int itpos993 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction989].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos993]) return;
+  if (init_table[itpos182]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38377;
-  fra.me.meth = LOCATE_parser___ReduceAction989___init;
+  fra.me.line = 6918;
+  fra.me.meth = LOCATE_parser___ReduceAction179___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38377 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6918 */
+  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[itpos993] = 1;
+  init_table[itpos182] = 1;
   return;
 }
-void parser___ReduceAction990___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction180___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 = 38381;
-  fra.me.meth = LOCATE_parser___ReduceAction990___action;
+  fra.me.line = 6922;
+  fra.me.meth = LOCATE_parser___ReduceAction180___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6924 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6925 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6926 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6927 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6928 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6929 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38392 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38392);
-    nit_exit(1);
-  }
-  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:38394 */
+  /* ./parser//parser.nit:6930 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6931 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6934 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38394);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6934);
   }
-  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:38396 */
+  /* ./parser//parser.nit:6935 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38396);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38398 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:38399 */
-  } else {
-    /* ./parser//parser.nit:38401 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* ./parser//parser.nit:6936 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38405 */
+  /* ./parser//parser.nit:6938 */
+  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:6939 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:6940 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction180____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38405);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6940);
   }
-  fra.me.REG[2] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(92);
+  REGB0 = ATTR_parser___ReduceAction180____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38415 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction990___init(val_t p0, int* init_table){
-  int itpos994 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction990].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos994]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 38417;
-  fra.me.meth = LOCATE_parser___ReduceAction990___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38417 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  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[itpos994] = 1;
   return;
 }
-void parser___ReduceAction991___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
   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 = 38421;
-  fra.me.meth = LOCATE_parser___ReduceAction991___action;
+  fra.me.line = 6943;
+  fra.me.meth = LOCATE_parser___ReduceAction180___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38426 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38426);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(93);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38433 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction991___init(val_t p0, int* init_table){
-  int itpos995 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction991].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos995]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 38435;
-  fra.me.meth = LOCATE_parser___ReduceAction991___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38435 */
+  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___ReduceAction180____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos995] = 1;
+  init_table[itpos183] = 1;
   return;
 }
-void parser___ReduceAction992___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 = 38439;
-  fra.me.meth = LOCATE_parser___ReduceAction992___action;
+  fra.me.line = 6947;
+  fra.me.meth = LOCATE_parser___ReduceAction181___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -102656,61 +23260,62 @@ void parser___ReduceAction992___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6949 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
-  /* ./parser//parser.nit:38445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38445);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:38447 */
+  /* ./parser//parser.nit:6951 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6952 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6953 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:6954 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6955 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction181____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38447);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6955);
   }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(94);
+  REGB0 = ATTR_parser___ReduceAction181____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38456 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction992___init(val_t p0, int* init_table){
-  int itpos996 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction992].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos996]) return;
+  if (init_table[itpos184]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38458;
-  fra.me.meth = LOCATE_parser___ReduceAction992___init;
+  fra.me.line = 6958;
+  fra.me.meth = LOCATE_parser___ReduceAction181___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38458 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6958 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos996] = 1;
+  init_table[itpos184] = 1;
   return;
 }
-void parser___ReduceAction993___action(val_t p0, val_t p1){
+void parser___ReduceAction182___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 = 38462;
-  fra.me.meth = LOCATE_parser___ReduceAction993___action;
+  fra.me.line = 6962;
+  fra.me.meth = LOCATE_parser___ReduceAction182___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -102720,248 +23325,201 @@ void parser___ReduceAction993___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6964 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6965 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6966 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38469 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38469);
-    nit_exit(1);
-  }
-  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:38471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38471);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:38473 */
+  /* ./parser//parser.nit:6967 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6969 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6970 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction182____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38473);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6970);
   }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL, NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(94);
+  REGB0 = ATTR_parser___ReduceAction182____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38482 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction993___init(val_t p0, int* init_table){
-  int itpos997 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction993].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos997]) return;
+  if (init_table[itpos185]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38484;
-  fra.me.meth = LOCATE_parser___ReduceAction993___init;
+  fra.me.line = 6973;
+  fra.me.meth = LOCATE_parser___ReduceAction182___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38484 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6973 */
+  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[itpos997] = 1;
+  init_table[itpos185] = 1;
   return;
 }
-void parser___ReduceAction994___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 = 38488;
-  fra.me.meth = LOCATE_parser___ReduceAction994___action;
+  fra.me.line = 6977;
+  fra.me.meth = LOCATE_parser___ReduceAction183___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6979 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6980 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38497 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38497);
-    nit_exit(1);
-  }
-  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:38499 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38499);
-    nit_exit(1);
-  }
-  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:38501 */
+  /* ./parser//parser.nit:6982 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38501);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6982);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38503 */
+  /* ./parser//parser.nit:6983 */
+  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:6988 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6989 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction183____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38503);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6989);
   }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(94);
+  REGB0 = ATTR_parser___ReduceAction183____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38512 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction994___init(val_t p0, int* init_table){
-  int itpos998 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction994].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos998]) return;
+  if (init_table[itpos186]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38514;
-  fra.me.meth = LOCATE_parser___ReduceAction994___init;
+  fra.me.line = 6992;
+  fra.me.meth = LOCATE_parser___ReduceAction183___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38514 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:6992 */
+  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[itpos998] = 1;
+  init_table[itpos186] = 1;
   return;
 }
-void parser___ReduceAction995___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} 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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38518;
-  fra.me.meth = LOCATE_parser___ReduceAction995___action;
+  fra.me.line = 6996;
+  fra.me.meth = LOCATE_parser___ReduceAction184___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6998 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6999 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7000 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38528);
-    nit_exit(1);
-  }
-  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:38530 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38530);
-    nit_exit(1);
-  }
-  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:38532 */
+  /* ./parser//parser.nit:7002 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38532);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7002);
   }
-  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:38534 */
+  /* ./parser//parser.nit:7004 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38534);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7004);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38536 */
+  /* ./parser//parser.nit:7005 */
+  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7010 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7011 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction184____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38536);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7011);
   }
-  fra.me.REG[2] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(94);
+  REGB0 = ATTR_parser___ReduceAction184____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38545 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction995___init(val_t p0, int* init_table){
-  int itpos999 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction995].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos999]) return;
+  if (init_table[itpos187]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38547;
-  fra.me.meth = LOCATE_parser___ReduceAction995___init;
+  fra.me.line = 7014;
+  fra.me.meth = LOCATE_parser___ReduceAction184___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38547 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7014 */
+  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[itpos999] = 1;
+  init_table[itpos187] = 1;
   return;
 }
-void parser___ReduceAction996___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[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 = 38551;
-  fra.me.meth = LOCATE_parser___ReduceAction996___action;
+  fra.me.line = 7018;
+  fra.me.meth = LOCATE_parser___ReduceAction185___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -102972,264 +23530,240 @@ void parser___ReduceAction996___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7020 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7021 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7022 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7023 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38561 */
+  /* ./parser//parser.nit:7025 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38561);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7025);
   }
-  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:38563 */
+  /* ./parser//parser.nit:7027 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38563);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7027);
   }
-  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:38565 */
+  /* ./parser//parser.nit:7029 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38565);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7029);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38567 */
+  /* ./parser//parser.nit:7030 */
+  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:7035 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7036 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction185____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38567);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7036);
   }
-  fra.me.REG[2] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction185____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38575 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction996___init(val_t p0, int* init_table){
-  int itpos1000 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction996].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1000]) return;
+  if (init_table[itpos188]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38577;
-  fra.me.meth = LOCATE_parser___ReduceAction996___init;
+  fra.me.line = 7039;
+  fra.me.meth = LOCATE_parser___ReduceAction185___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38577 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7039 */
+  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[itpos1000] = 1;
+  init_table[itpos188] = 1;
   return;
 }
-void parser___ReduceAction997___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 = 38581;
-  fra.me.meth = LOCATE_parser___ReduceAction997___action;
+  fra.me.line = 7043;
+  fra.me.meth = LOCATE_parser___ReduceAction186___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7045 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7046 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7047 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:38590 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38590);
-    nit_exit(1);
-  }
-  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:38592 */
+  /* ./parser//parser.nit:7048 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7050 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38592);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7050);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38594 */
+  /* ./parser//parser.nit:7051 */
+  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:7052 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7053 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction186____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38594);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7053);
   }
-  fra.me.REG[2] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction186____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38602 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction997___init(val_t p0, int* init_table){
-  int itpos1001 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction997].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1001]) return;
+  if (init_table[itpos189]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38604;
-  fra.me.meth = LOCATE_parser___ReduceAction997___init;
+  fra.me.line = 7056;
+  fra.me.meth = LOCATE_parser___ReduceAction186___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38604 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7056 */
+  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[itpos1001] = 1;
+  init_table[itpos189] = 1;
   return;
 }
-void parser___ReduceAction998___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} 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 = 38608;
-  fra.me.meth = LOCATE_parser___ReduceAction998___action;
+  fra.me.line = 7060;
+  fra.me.meth = LOCATE_parser___ReduceAction187___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7062 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7063 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7065 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7066 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:38620 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38620);
-    nit_exit(1);
-  }
-  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:38622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38622);
-    nit_exit(1);
-  }
-  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:38624 */
+  /* ./parser//parser.nit:7068 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38624);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7068);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:38626 */
+  /* ./parser//parser.nit:7070 */
+  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)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:38627 */
   } else {
-    /* ./parser//parser.nit:38629 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7070);
   }
-  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:38633 */
+  /* ./parser//parser.nit:7072 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38633);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7072);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38635 */
+  /* ./parser//parser.nit:7073 */
+  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:7080 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7081 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction187____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38635);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7081);
   }
-  fra.me.REG[2] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction187____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38644 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction998___init(val_t p0, int* init_table){
-  int itpos1002 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction998].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1002]) return;
+  if (init_table[itpos190]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38646;
-  fra.me.meth = LOCATE_parser___ReduceAction998___init;
+  fra.me.line = 7084;
+  fra.me.meth = LOCATE_parser___ReduceAction187___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38646 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7084 */
+  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[itpos1002] = 1;
+  init_table[itpos190] = 1;
   return;
 }
-void parser___ReduceAction999___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction188___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 = 38650;
-  fra.me.meth = LOCATE_parser___ReduceAction999___action;
+  fra.me.line = 7088;
+  fra.me.meth = LOCATE_parser___ReduceAction188___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -103237,93 +23771,92 @@ void parser___ReduceAction999___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7090 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7091 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7092 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7093 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7094 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:38661 */
+  /* ./parser//parser.nit:7095 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7097 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38661);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7097);
   }
-  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:38663 */
+  /* ./parser//parser.nit:7099 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38663);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7099);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38665 */
+  /* ./parser//parser.nit:7101 */
+  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)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:38666 */
   } else {
-    /* ./parser//parser.nit:38668 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7101);
   }
-  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:38672 */
+  /* ./parser//parser.nit:7103 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38672);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7103);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38674 */
+  /* ./parser//parser.nit:7104 */
+  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:7111 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7112 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction188____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38674);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7112);
   }
-  fra.me.REG[2] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction188____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38683 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction999___init(val_t p0, int* init_table){
-  int itpos1003 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction999].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1003]) return;
+  if (init_table[itpos191]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38685;
-  fra.me.meth = LOCATE_parser___ReduceAction999___init;
+  fra.me.line = 7115;
+  fra.me.meth = LOCATE_parser___ReduceAction188___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38685 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7115 */
+  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[itpos1003] = 1;
+  init_table[itpos191] = 1;
   return;
 }
-void parser___ReduceAction1000___action(val_t p0, val_t p1){
+void parser___ReduceAction189___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 = 38689;
-  fra.me.meth = LOCATE_parser___ReduceAction1000___action;
+  fra.me.line = 7119;
+  fra.me.meth = LOCATE_parser___ReduceAction189___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -103335,251 +23868,200 @@ void parser___ReduceAction1000___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7121 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7122 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7123 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7124 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7125 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7126 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38698 */
+  /* ./parser//parser.nit:7127 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7129 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38698);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7129);
   }
-  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:38700 */
+  /* ./parser//parser.nit:7131 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38700);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7131);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38702 */
+  /* ./parser//parser.nit:7133 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:38703 */
   } else {
-    /* ./parser//parser.nit:38705 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7133);
   }
-  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:38709 */
+  /* ./parser//parser.nit:7135 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38709);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7135);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38711 */
+  /* ./parser//parser.nit:7136 */
+  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:7143 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7144 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction189____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38711);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7144);
   }
-  fra.me.REG[2] = NEW_ABraAssignExpr_parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction189____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38719 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1000___init(val_t p0, int* init_table){
-  int itpos1004 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1000].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1004]) return;
+  if (init_table[itpos192]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38721;
-  fra.me.meth = LOCATE_parser___ReduceAction1000___init;
+  fra.me.line = 7147;
+  fra.me.meth = LOCATE_parser___ReduceAction189___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38721 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7147 */
+  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[itpos1004] = 1;
+  init_table[itpos192] = 1;
   return;
 }
-void parser___ReduceAction1001___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[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 = 38725;
-  fra.me.meth = LOCATE_parser___ReduceAction1001___action;
+  fra.me.line = 7151;
+  fra.me.meth = LOCATE_parser___ReduceAction190___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7153 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7154 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7155 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7156 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7157 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7158 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38735 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38735);
-    nit_exit(1);
-  }
-  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:38737 */
+  /* ./parser//parser.nit:7159 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7160 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7162 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38737);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7162);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:38739 */
+  /* ./parser//parser.nit:7164 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38739);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7164);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38741 */
+  /* ./parser//parser.nit:7166 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38741);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7166);
   }
-  fra.me.REG[2] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38749 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1001___init(val_t p0, int* init_table){
-  int itpos1005 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1001].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1005]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 38751;
-  fra.me.meth = LOCATE_parser___ReduceAction1001___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38751 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1005] = 1;
-  return;
-}
-void parser___ReduceAction1002___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 = 38755;
-  fra.me.meth = LOCATE_parser___ReduceAction1002___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:38764 */
+  /* ./parser//parser.nit:7168 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38764);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7168);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:38766 */
+  /* ./parser//parser.nit:7170 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38766);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7170);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38768 */
+  /* ./parser//parser.nit:7171 */
+  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:7178 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7179 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction190____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38768);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7179);
   }
-  fra.me.REG[2] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction190____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38776 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1002___init(val_t p0, int* init_table){
-  int itpos1006 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1002].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1006]) return;
+  if (init_table[itpos193]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38778;
-  fra.me.meth = LOCATE_parser___ReduceAction1002___init;
+  fra.me.line = 7182;
+  fra.me.meth = LOCATE_parser___ReduceAction190___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38778 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7182 */
+  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[itpos1006] = 1;
+  init_table[itpos193] = 1;
   return;
 }
-void parser___ReduceAction1003___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction191___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 = 38782;
-  fra.me.meth = LOCATE_parser___ReduceAction1003___action;
+  fra.me.line = 7186;
+  fra.me.meth = LOCATE_parser___ReduceAction191___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -103587,103 +24069,96 @@ void parser___ReduceAction1003___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7188 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7189 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7190 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7191 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7192 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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:7195 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:38794 */
+  /* ./parser//parser.nit:7197 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38794);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7197);
   }
+  /* ./parser//parser.nit:7199 */
   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:38796 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38796);
-    nit_exit(1);
-  }
-  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:38798 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38798);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7199);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:38800 */
+  /* ./parser//parser.nit:7201 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:38801 */
   } else {
-    /* ./parser//parser.nit:38803 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7201);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:38807 */
+  /* ./parser//parser.nit:7203 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38807);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7203);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38809 */
+  /* ./parser//parser.nit:7204 */
+  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:7211 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7212 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction191____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38809);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7212);
   }
-  fra.me.REG[2] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction191____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38818 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1003___init(val_t p0, int* init_table){
-  int itpos1007 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1003].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1007]) return;
+  if (init_table[itpos194]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38820;
-  fra.me.meth = LOCATE_parser___ReduceAction1003___init;
+  fra.me.line = 7215;
+  fra.me.meth = LOCATE_parser___ReduceAction191___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38820 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7215 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1007] = 1;
+  init_table[itpos194] = 1;
   return;
 }
-void parser___ReduceAction1004___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[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 = 38824;
-  fra.me.meth = LOCATE_parser___ReduceAction1004___action;
+  fra.me.line = 7219;
+  fra.me.meth = LOCATE_parser___ReduceAction192___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -103696,185 +24171,168 @@ void parser___ReduceAction1004___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7221 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7222 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7223 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7224 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7225 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7227 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:38835 */
+  /* ./parser//parser.nit:7228 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7229 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7231 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38835);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7231);
   }
-  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:38837 */
+  /* ./parser//parser.nit:7233 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7233);
+  }
+  /* ./parser//parser.nit:7235 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38837);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7235);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38839 */
+  /* ./parser//parser.nit:7237 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:38840 */
   } else {
-    /* ./parser//parser.nit:38842 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7237);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:38846 */
+  /* ./parser//parser.nit:7239 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38846);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7239);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38848 */
+  /* ./parser//parser.nit:7240 */
+  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:7247 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7248 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction192____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38848);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7248);
   }
-  fra.me.REG[2] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction192____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38857 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1004___init(val_t p0, int* init_table){
-  int itpos1008 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1004].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1008]) return;
+  if (init_table[itpos195]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38859;
-  fra.me.meth = LOCATE_parser___ReduceAction1004___init;
+  fra.me.line = 7251;
+  fra.me.meth = LOCATE_parser___ReduceAction192___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38859 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7251 */
+  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[itpos1008] = 1;
+  init_table[itpos195] = 1;
   return;
 }
-void parser___ReduceAction1005___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction193___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 = 38863;
-  fra.me.meth = LOCATE_parser___ReduceAction1005___action;
+  fra.me.line = 7255;
+  fra.me.meth = LOCATE_parser___ReduceAction193___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7257 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7258 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:38872 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38872);
-    nit_exit(1);
-  }
-  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:38874 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38874);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:38876 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:38877 */
-  } else {
-    /* ./parser//parser.nit:38879 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
-  /* ./parser//parser.nit:38883 */
+  /* ./parser//parser.nit:7260 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38883);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7260);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38885 */
+  /* ./parser//parser.nit:7261 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:7265 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7266 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction193____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38885);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7266);
   }
-  fra.me.REG[2] = NEW_ABraReassignExpr_parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(95);
+  REGB0 = ATTR_parser___ReduceAction193____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38893 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1005___init(val_t p0, int* init_table){
-  int itpos1009 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1005].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1009]) return;
+  if (init_table[itpos196]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38895;
-  fra.me.meth = LOCATE_parser___ReduceAction1005___init;
+  fra.me.line = 7269;
+  fra.me.meth = LOCATE_parser___ReduceAction193___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38895 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7269 */
+  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[itpos1009] = 1;
+  init_table[itpos196] = 1;
   return;
 }
-void parser___ReduceAction1006___action(val_t p0, val_t p1){
+void parser___ReduceAction194___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 = 38899;
-  fra.me.meth = LOCATE_parser___ReduceAction1006___action;
+  fra.me.line = 7273;
+  fra.me.meth = LOCATE_parser___ReduceAction194___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -103884,85 +24342,66 @@ void parser___ReduceAction1006___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7275 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7276 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38908 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38908);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:7277 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:38911 */
+  /* ./parser//parser.nit:7279 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38911);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7279);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:38912 */
+  /* ./parser//parser.nit:7280 */
+  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* ./parser//parser.nit:7285 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7286 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction194____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:38913 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7286);
   }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction194____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38924 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1006___init(val_t p0, int* init_table){
-  int itpos1010 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1006].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1010]) return;
+  if (init_table[itpos197]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38926;
-  fra.me.meth = LOCATE_parser___ReduceAction1006___init;
+  fra.me.line = 7289;
+  fra.me.meth = LOCATE_parser___ReduceAction194___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38926 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7289 */
+  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[itpos1010] = 1;
+  init_table[itpos197] = 1;
   return;
 }
-void parser___ReduceAction1007___action(val_t p0, val_t p1){
+void parser___ReduceAction195___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 = 38930;
-  fra.me.meth = LOCATE_parser___ReduceAction1007___action;
+  fra.me.line = 7293;
+  fra.me.meth = LOCATE_parser___ReduceAction195___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -103973,254 +24412,279 @@ void parser___ReduceAction1007___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7295 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7296 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:38940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38940);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:7298 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:38943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38943);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:38945 */
+  /* ./parser//parser.nit:7300 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38945);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7300);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:38946 */
+  /* ./parser//parser.nit:7302 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:38947 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7302);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:38950 */
+  /* ./parser//parser.nit:7303 */
+  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:7308 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7309 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction195____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:38951 */
   } else {
-    /* ./parser//parser.nit:38953 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7309);
   }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction195____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38965 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1007___init(val_t p0, int* init_table){
-  int itpos1011 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1007].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1011]) return;
+  if (init_table[itpos198]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38967;
-  fra.me.meth = LOCATE_parser___ReduceAction1007___init;
+  fra.me.line = 7312;
+  fra.me.meth = LOCATE_parser___ReduceAction195___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38967 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7312 */
+  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[itpos1011] = 1;
+  init_table[itpos198] = 1;
   return;
 }
-void parser___ReduceAction1008___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 38971;
-  fra.me.meth = LOCATE_parser___ReduceAction1008___action;
+  fra.me.line = 7316;
+  fra.me.meth = LOCATE_parser___ReduceAction196___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:38978 */
+  /* ./parser//parser.nit:7318 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7319 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7320 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7321 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7322 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7323 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7324 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7325 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7327 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 38978);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7327);
   }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(96);
+  /* ./parser//parser.nit:7329 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_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[5], fra.me.REG[3]);
+  fra.me.REG[5] = fra.me.REG[3];
+  /* ./parser//parser.nit:7331 */
+  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:7336 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7337 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction196____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7337);
+  }
+  REGB0 = ATTR_parser___ReduceAction196____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:38989 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1008___init(val_t p0, int* init_table){
-  int itpos1012 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1008].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1012]) return;
+  if (init_table[itpos199]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 38991;
-  fra.me.meth = LOCATE_parser___ReduceAction1008___init;
+  fra.me.line = 7340;
+  fra.me.meth = LOCATE_parser___ReduceAction196___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:38991 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7340 */
+  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[itpos1012] = 1;
+  init_table[itpos199] = 1;
   return;
 }
-void parser___ReduceAction1009___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 38995;
-  fra.me.meth = LOCATE_parser___ReduceAction1009___action;
+  fra.me.line = 7344;
+  fra.me.meth = LOCATE_parser___ReduceAction197___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:39001 */
+  /* ./parser//parser.nit:7346 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./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:7349 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7352 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7353 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7354 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7356 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39001);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7356);
   }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(96);
+  /* ./parser//parser.nit:7358 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7358);
+  }
+  /* ./parser//parser.nit:7360 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7360);
+  }
+  /* ./parser//parser.nit:7361 */
+  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:7362 */
+  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:7367 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7368 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction197____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7368);
+  }
+  REGB0 = ATTR_parser___ReduceAction197____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39012 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1009___init(val_t p0, int* init_table){
-  int itpos1013 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1009].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1013]) return;
+  if (init_table[itpos200]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39014;
-  fra.me.meth = LOCATE_parser___ReduceAction1009___init;
+  fra.me.line = 7371;
+  fra.me.meth = LOCATE_parser___ReduceAction197___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39014 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7371 */
+  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[itpos1013] = 1;
+  init_table[itpos200] = 1;
   return;
 }
-void parser___ReduceAction1010___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39018;
-  fra.me.meth = LOCATE_parser___ReduceAction1010___action;
+  fra.me.line = 7375;
+  fra.me.meth = LOCATE_parser___ReduceAction198___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7377 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7378 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39028 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39028);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:39031 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39031);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:7379 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7381 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39032 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -104234,101 +24698,82 @@ void parser___ReduceAction1010___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39033 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:7382 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39039 */
+  /* ./parser//parser.nit:7384 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7385 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction198____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39039);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7385);
   }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction198____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39046 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1010___init(val_t p0, int* init_table){
-  int itpos1014 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1010].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1014]) return;
+  if (init_table[itpos201]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39048;
-  fra.me.meth = LOCATE_parser___ReduceAction1010___init;
+  fra.me.line = 7388;
+  fra.me.meth = LOCATE_parser___ReduceAction198___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39048 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7388 */
+  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[itpos1014] = 1;
+  init_table[itpos201] = 1;
   return;
 }
-void parser___ReduceAction1011___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39052;
-  fra.me.meth = LOCATE_parser___ReduceAction1011___action;
+  fra.me.line = 7392;
+  fra.me.meth = LOCATE_parser___ReduceAction199___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7394 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7395 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7396 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39063 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39063);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:39066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39066);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:7397 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7400 */
   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:39068 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39068);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7400);
   }
+  /* ./parser//parser.nit:7401 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:39069 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
@@ -104342,63 +24787,58 @@ void parser___ReduceAction1011___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39070 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:39073 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:39074 */
-  } else {
-    /* ./parser//parser.nit:39076 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* ./parser//parser.nit:7402 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39083 */
+  /* ./parser//parser.nit:7404 */
+  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:7405 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7406 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction199____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39083);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7406);
   }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction199____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39090 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1011___init(val_t p0, int* init_table){
-  int itpos1015 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1011].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1015]) return;
+  if (init_table[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39092;
-  fra.me.meth = LOCATE_parser___ReduceAction1011___init;
+  fra.me.line = 7409;
+  fra.me.meth = LOCATE_parser___ReduceAction199___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39092 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7409 */
+  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[itpos1015] = 1;
+  init_table[itpos202] = 1;
   return;
 }
-void parser___ReduceAction1012___action(val_t p0, val_t p1){
+void parser___ReduceAction200___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 = 39096;
-  fra.me.meth = LOCATE_parser___ReduceAction1012___action;
+  fra.me.line = 7413;
+  fra.me.meth = LOCATE_parser___ReduceAction200___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -104408,65 +24848,60 @@ void parser___ReduceAction1012___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7415 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7416 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39104 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39104);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39110 */
+  /* ./parser//parser.nit:7417 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7418 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7420 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7421 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction200____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39110);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7421);
   }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction200____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39117 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1012___init(val_t p0, int* init_table){
-  int itpos1016 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1012].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1016]) return;
+  if (init_table[itpos203]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39119;
-  fra.me.meth = LOCATE_parser___ReduceAction1012___init;
+  fra.me.line = 7424;
+  fra.me.meth = LOCATE_parser___ReduceAction200___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39119 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7424 */
+  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[itpos1016] = 1;
+  init_table[itpos203] = 1;
   return;
 }
-void parser___ReduceAction1013___action(val_t p0, val_t p1){
+void parser___ReduceAction202___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 = 39123;
-  fra.me.meth = LOCATE_parser___ReduceAction1013___action;
+  fra.me.line = 7428;
+  fra.me.meth = LOCATE_parser___ReduceAction202___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -104476,64 +24911,60 @@ void parser___ReduceAction1013___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7430 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7431 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7432 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39130 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39130);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39136 */
+  /* ./parser//parser.nit:7433 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7435 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7436 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction202____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39136);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7436);
   }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction202____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39143 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1013___init(val_t p0, int* init_table){
-  int itpos1017 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1013].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction202___init(val_t p0, val_t p1, int* init_table){
+  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction202].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1017]) return;
+  if (init_table[itpos204]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39145;
-  fra.me.meth = LOCATE_parser___ReduceAction1013___init;
+  fra.me.line = 7439;
+  fra.me.meth = LOCATE_parser___ReduceAction202___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39145 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7439 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction202____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1017] = 1;
+  init_table[itpos204] = 1;
   return;
 }
-void parser___ReduceAction1014___action(val_t p0, val_t p1){
+void parser___ReduceAction203___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 = 39149;
-  fra.me.meth = LOCATE_parser___ReduceAction1014___action;
+  fra.me.line = 7443;
+  fra.me.meth = LOCATE_parser___ReduceAction203___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -104542,281 +24973,206 @@ void parser___ReduceAction1014___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7445 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7446 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39155 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39155);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39157 */
+  /* ./parser//parser.nit:7447 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7448 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7449 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:7452 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7453 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction203____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39157);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7453);
   }
-  fra.me.REG[2] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(96);
+  REGB0 = ATTR_parser___ReduceAction203____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39164 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1014___init(val_t p0, int* init_table){
-  int itpos1018 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1014].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1018]) return;
+  if (init_table[itpos205]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39166;
-  fra.me.meth = LOCATE_parser___ReduceAction1014___init;
+  fra.me.line = 7456;
+  fra.me.meth = LOCATE_parser___ReduceAction203___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39166 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7456 */
+  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[itpos1018] = 1;
+  init_table[itpos205] = 1;
   return;
 }
-void parser___ReduceAction1015___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction204___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 = 39170;
-  fra.me.meth = LOCATE_parser___ReduceAction1015___action;
+  fra.me.line = 7460;
+  fra.me.meth = LOCATE_parser___ReduceAction204___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7462 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7463 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39182 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39182);
-    nit_exit(1);
-  }
-  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:39184 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39184);
-    nit_exit(1);
-  }
-  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:39186 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39186);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39188 */
+  /* ./parser//parser.nit:7464 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7465 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:7468 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7469 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction204____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39188);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7469);
   }
-  fra.me.REG[2] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(97);
+  REGB0 = ATTR_parser___ReduceAction204____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39196 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1015___init(val_t p0, int* init_table){
-  int itpos1019 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1015].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1019]) return;
+  if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39198;
-  fra.me.meth = LOCATE_parser___ReduceAction1015___init;
+  fra.me.line = 7472;
+  fra.me.meth = LOCATE_parser___ReduceAction204___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39198 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7472 */
+  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[itpos1019] = 1;
+  init_table[itpos206] = 1;
   return;
 }
-void parser___ReduceAction1016___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction205___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39202;
-  fra.me.meth = LOCATE_parser___ReduceAction1016___action;
+  fra.me.line = 7476;
+  fra.me.meth = LOCATE_parser___ReduceAction205___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7478 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7479 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39211 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39211);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39214 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39214);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:39215 */
+  /* ./parser//parser.nit:7481 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7482 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction205____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39216 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7482);
   }
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  fra.me.REG[4] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction205____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39227 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1016___init(val_t p0, int* init_table){
-  int itpos1020 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1016].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1020]) return;
+  if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39229;
-  fra.me.meth = LOCATE_parser___ReduceAction1016___init;
+  fra.me.line = 7485;
+  fra.me.meth = LOCATE_parser___ReduceAction205___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39229 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7485 */
+  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[itpos1020] = 1;
+  init_table[itpos207] = 1;
   return;
 }
-void parser___ReduceAction1017___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 = 39233;
-  fra.me.meth = LOCATE_parser___ReduceAction1017___action;
+  fra.me.line = 7489;
+  fra.me.meth = LOCATE_parser___ReduceAction206___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7491 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7492 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39243 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39243);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7493 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7495 */
   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:39246 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39246);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:39248 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39248);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7495);
   }
+  /* ./parser//parser.nit:7496 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39249 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -104830,207 +25186,183 @@ void parser___ReduceAction1017___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39250 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:7497 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:39253 */
+  /* ./parser//parser.nit:7499 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:7502 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7503 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction206____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:39254 */
   } else {
-    /* ./parser//parser.nit:39256 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7503);
   }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction206____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39268 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1017___init(val_t p0, int* init_table){
-  int itpos1021 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1017].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1021]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 39270;
-  fra.me.meth = LOCATE_parser___ReduceAction1017___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39270 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  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[itpos1021] = 1;
   return;
 }
-void parser___ReduceAction1018___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 39274;
-  fra.me.meth = LOCATE_parser___ReduceAction1018___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39281 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39281);
-    nit_exit(1);
-  }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(98);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39292 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1018___init(val_t p0, int* init_table){
-  int itpos1022 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1018].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1022]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 39294;
-  fra.me.meth = LOCATE_parser___ReduceAction1018___init;
+  fra.me.line = 7506;
+  fra.me.meth = LOCATE_parser___ReduceAction206___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39294 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7506 */
+  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[itpos1022] = 1;
+  init_table[itpos208] = 1;
   return;
 }
-void parser___ReduceAction1019___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 39298;
-  fra.me.meth = LOCATE_parser___ReduceAction1019___action;
+  fra.me.line = 7510;
+  fra.me.meth = LOCATE_parser___ReduceAction207___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39304 */
+  /* ./parser//parser.nit:7512 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7513 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7514 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7515 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7517 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39304);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7517);
   }
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[2], fra.me.REG[3], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(98);
+  /* ./parser//parser.nit:7519 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7519);
+  }
+  /* ./parser//parser.nit:7520 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7521 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:7523 */
+  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:7524 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
+  /* ./parser//parser.nit:7527 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7528 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction207____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7528);
+  }
+  REGB0 = ATTR_parser___ReduceAction207____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39315 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1019___init(val_t p0, int* init_table){
-  int itpos1023 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1019].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1023]) return;
+  if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39317;
-  fra.me.meth = LOCATE_parser___ReduceAction1019___init;
+  fra.me.line = 7531;
+  fra.me.meth = LOCATE_parser___ReduceAction207___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39317 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7531 */
+  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[itpos1023] = 1;
+  init_table[itpos209] = 1;
   return;
 }
-void parser___ReduceAction1020___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39321;
-  fra.me.meth = LOCATE_parser___ReduceAction1020___action;
+  fra.me.line = 7535;
+  fra.me.meth = LOCATE_parser___ReduceAction208___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7537 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7538 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7539 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39331 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39331);
-    nit_exit(1);
-  }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7540 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7542 */
   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:39334 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39334);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7542);
   }
+  /* ./parser//parser.nit:7543 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39335 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -105044,101 +25376,92 @@ void parser___ReduceAction1020___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39336 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+    /* ./parser//parser.nit:7544 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39342 */
+  /* ./parser//parser.nit:7546 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:7549 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7550 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction208____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39342);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7550);
   }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction208____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39349 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1020___init(val_t p0, int* init_table){
-  int itpos1024 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1020].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1024]) return;
+  if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39351;
-  fra.me.meth = LOCATE_parser___ReduceAction1020___init;
+  fra.me.line = 7553;
+  fra.me.meth = LOCATE_parser___ReduceAction208___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39351 */
+  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___ReduceAction208____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1024] = 1;
+  init_table[itpos210] = 1;
   return;
 }
-void parser___ReduceAction1021___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction209___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 = 39355;
-  fra.me.meth = LOCATE_parser___ReduceAction1021___action;
+  fra.me.line = 7557;
+  fra.me.meth = LOCATE_parser___ReduceAction209___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7559 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7560 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7561 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7562 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39366 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39366);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7563 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7565 */
   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:39369 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39369);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7565);
   }
+  /* ./parser//parser.nit:7567 */
   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:39371 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39371);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7567);
   }
+  /* ./parser//parser.nit:7568 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:39372 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
@@ -105152,63 +25475,60 @@ void parser___ReduceAction1021___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39373 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[4]);
+    /* ./parser//parser.nit:7569 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:39376 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:39377 */
-  } else {
-    /* ./parser//parser.nit:39379 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39386 */
+  /* ./parser//parser.nit:7571 */
+  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:7572 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
+  /* ./parser//parser.nit:7575 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7576 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction209____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39386);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7576);
   }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction209____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39393 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1021___init(val_t p0, int* init_table){
-  int itpos1025 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1021].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1025]) return;
+  if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39395;
-  fra.me.meth = LOCATE_parser___ReduceAction1021___init;
+  fra.me.line = 7579;
+  fra.me.meth = LOCATE_parser___ReduceAction209___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39395 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7579 */
+  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[itpos1025] = 1;
+  init_table[itpos211] = 1;
   return;
 }
-void parser___ReduceAction1022___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 = 39399;
-  fra.me.meth = LOCATE_parser___ReduceAction1022___action;
+  fra.me.line = 7583;
+  fra.me.meth = LOCATE_parser___ReduceAction210___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -105218,514 +25538,415 @@ void parser___ReduceAction1022___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7585 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7586 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39407 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39407);
-    nit_exit(1);
-  }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39413 */
+  /* ./parser//parser.nit:7587 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7589 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7590 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction210____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39413);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7590);
   }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction210____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39420 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1022___init(val_t p0, int* init_table){
-  int itpos1026 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1022].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1026]) return;
+  if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39422;
-  fra.me.meth = LOCATE_parser___ReduceAction1022___init;
+  fra.me.line = 7593;
+  fra.me.meth = LOCATE_parser___ReduceAction210___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39422 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7593 */
+  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[itpos1026] = 1;
+  init_table[itpos212] = 1;
   return;
 }
-void parser___ReduceAction1023___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction213___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 = 39426;
-  fra.me.meth = LOCATE_parser___ReduceAction1023___action;
+  fra.me.line = 7597;
+  fra.me.meth = LOCATE_parser___ReduceAction213___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7599 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7600 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39433 */
+  /* ./parser//parser.nit:7602 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39433);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7602);
   }
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39439 */
+  /* ./parser//parser.nit:7603 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7607 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7608 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction213____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39439);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7608);
   }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(98);
+  REGB0 = ATTR_parser___ReduceAction213____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39446 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1023___init(val_t p0, int* init_table){
-  int itpos1027 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1023].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
+  int itpos213 = 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[itpos1027]) return;
+  if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39448;
-  fra.me.meth = LOCATE_parser___ReduceAction1023___init;
+  fra.me.line = 7611;
+  fra.me.meth = LOCATE_parser___ReduceAction213___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39448 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7611 */
+  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[itpos1027] = 1;
+  init_table[itpos213] = 1;
   return;
 }
-void parser___ReduceAction1024___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction214___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 = 39452;
-  fra.me.meth = LOCATE_parser___ReduceAction1024___action;
+  fra.me.line = 7615;
+  fra.me.meth = LOCATE_parser___ReduceAction214___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7617 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7618 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
-  /* ./parser//parser.nit:39458 */
+  /* ./parser//parser.nit:7619 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7621 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39458);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7621);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39460 */
+  /* ./parser//parser.nit:7623 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39460);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7623);
   }
-  fra.me.REG[2] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(98);
+  /* ./parser//parser.nit:7624 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7628 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7629 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction214____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7629);
+  }
+  REGB0 = ATTR_parser___ReduceAction214____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39467 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1024___init(val_t p0, int* init_table){
-  int itpos1028 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1024].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
+  int itpos214 = 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[itpos1028]) return;
+  if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39469;
-  fra.me.meth = LOCATE_parser___ReduceAction1024___init;
+  fra.me.line = 7632;
+  fra.me.meth = LOCATE_parser___ReduceAction214___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39469 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7632 */
+  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[itpos1028] = 1;
+  init_table[itpos214] = 1;
   return;
 }
-void parser___ReduceAction1025___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction215___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39473;
-  fra.me.meth = LOCATE_parser___ReduceAction1025___action;
+  fra.me.line = 7636;
+  fra.me.meth = LOCATE_parser___ReduceAction215___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7638 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7639 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39486 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39486);
-    nit_exit(1);
-  }
-  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:39488 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39488);
-    nit_exit(1);
-  }
-  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:39490 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39490);
-    nit_exit(1);
-  }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39493 */
+  /* ./parser//parser.nit:7641 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39493);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7641);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:39494 */
+  /* ./parser//parser.nit:7642 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:7647 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7648 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction215____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7648);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39495 */
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-  }
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction215____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39508 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1025___init(val_t p0, int* init_table){
-  int itpos1029 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1025].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
+  int itpos215 = 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[itpos1029]) return;
+  if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39510;
-  fra.me.meth = LOCATE_parser___ReduceAction1025___init;
+  fra.me.line = 7651;
+  fra.me.meth = LOCATE_parser___ReduceAction215___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39510 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7651 */
+  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[itpos1029] = 1;
+  init_table[itpos215] = 1;
   return;
 }
-void parser___ReduceAction1026___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39514;
-  fra.me.meth = LOCATE_parser___ReduceAction1026___action;
+  fra.me.line = 7655;
+  fra.me.meth = LOCATE_parser___ReduceAction216___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7657 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7658 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7659 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39528);
-    nit_exit(1);
-  }
-  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:39530 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39530);
-    nit_exit(1);
-  }
-  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:39532 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39532);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:39535 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39535);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:39537 */
+  /* ./parser//parser.nit:7661 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39537);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7661);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39538 */
+  /* ./parser//parser.nit:7663 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7663);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39539 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:39542 */
+  /* ./parser//parser.nit:7664 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7669 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7670 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction216____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:39543 */
   } else {
-    /* ./parser//parser.nit:39545 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7670);
   }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction216____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39559 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1026___init(val_t p0, int* init_table){
-  int itpos1030 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1026].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
+  int itpos216 = 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[itpos1030]) return;
+  if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39561;
-  fra.me.meth = LOCATE_parser___ReduceAction1026___init;
+  fra.me.line = 7673;
+  fra.me.meth = LOCATE_parser___ReduceAction216___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39561 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7673 */
+  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[itpos1030] = 1;
+  init_table[itpos216] = 1;
   return;
 }
-void parser___ReduceAction1027___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction217___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 = 39565;
-  fra.me.meth = LOCATE_parser___ReduceAction1027___action;
+  fra.me.line = 7677;
+  fra.me.meth = LOCATE_parser___ReduceAction217___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7679 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7681 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39576 */
+  /* ./parser//parser.nit:7683 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39576);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7683);
   }
+  /* ./parser//parser.nit:7685 */
   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:39578 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39578);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7685);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:39580 */
+  /* ./parser//parser.nit:7686 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:7691 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7692 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction217____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39580);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7692);
   }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction217____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39593 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1027___init(val_t p0, int* init_table){
-  int itpos1031 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1027].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction217___init(val_t p0, val_t p1, int* init_table){
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction217].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1031]) return;
+  if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39595;
-  fra.me.meth = LOCATE_parser___ReduceAction1027___init;
+  fra.me.line = 7695;
+  fra.me.meth = LOCATE_parser___ReduceAction217___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39595 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7695 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction217____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1031] = 1;
+  init_table[itpos217] = 1;
   return;
 }
-void parser___ReduceAction1028___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[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 = 39599;
-  fra.me.meth = LOCATE_parser___ReduceAction1028___action;
+  fra.me.line = 7699;
+  fra.me.meth = LOCATE_parser___ReduceAction218___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -105736,513 +25957,362 @@ void parser___ReduceAction1028___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7701 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7702 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7703 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39609 */
+  /* ./parser//parser.nit:7704 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7706 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7706);
+  }
+  /* ./parser//parser.nit:7708 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39609);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7708);
   }
+  /* ./parser//parser.nit:7710 */
   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:39611 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39611);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7710);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:39613 */
+  /* ./parser//parser.nit:7711 */
+  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:7716 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7717 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction218____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39613);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7717);
   }
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  fra.me.REG[5] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[5], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction218____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39626 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1028___init(val_t p0, int* init_table){
-  int itpos1032 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1028].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction218___init(val_t p0, val_t p1, int* init_table){
+  int itpos218 = 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[itpos1032]) return;
+  if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39628;
-  fra.me.meth = LOCATE_parser___ReduceAction1028___init;
+  fra.me.line = 7720;
+  fra.me.meth = LOCATE_parser___ReduceAction218___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39628 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7720 */
+  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[itpos1032] = 1;
+  init_table[itpos218] = 1;
   return;
 }
-void parser___ReduceAction1029___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39632;
-  fra.me.meth = LOCATE_parser___ReduceAction1029___action;
+  fra.me.line = 7724;
+  fra.me.meth = LOCATE_parser___ReduceAction219___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7726 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7727 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39646);
-    nit_exit(1);
-  }
-  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:39648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39648);
-    nit_exit(1);
-  }
-  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:39650 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39650);
-    nit_exit(1);
-  }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:39653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39653);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39654 */
+  /* ./parser//parser.nit:7729 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39655 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7729);
   }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39661 */
+  /* ./parser//parser.nit:7730 */
+  fra.me.REG[3] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:7733 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7734 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction219____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39661);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7734);
   }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction219____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39670 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1029___init(val_t p0, int* init_table){
-  int itpos1033 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1029].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction219].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1033]) return;
+  if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39672;
-  fra.me.meth = LOCATE_parser___ReduceAction1029___init;
+  fra.me.line = 7737;
+  fra.me.meth = LOCATE_parser___ReduceAction219___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39672 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7737 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1033] = 1;
+  init_table[itpos219] = 1;
   return;
 }
-void parser___ReduceAction1030___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction220___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39676;
-  fra.me.meth = LOCATE_parser___ReduceAction1030___action;
+  fra.me.line = 7741;
+  fra.me.meth = LOCATE_parser___ReduceAction220___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7743 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7744 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39691);
-    nit_exit(1);
-  }
-  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:39693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39693);
-    nit_exit(1);
-  }
-  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:39695 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39695);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:39698 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39698);
-    nit_exit(1);
-  }
-  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:39700 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39700);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:39701 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39702 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:39705 */
+  /* ./parser//parser.nit:7746 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:39706 */
   } else {
-    /* ./parser//parser.nit:39708 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7746);
   }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39715 */
+  /* ./parser//parser.nit:7747 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:7752 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7753 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction220____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39715);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7753);
   }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction220____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39724 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1030___init(val_t p0, int* init_table){
-  int itpos1034 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1030].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
+  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction220].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1034]) return;
+  if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39726;
-  fra.me.meth = LOCATE_parser___ReduceAction1030___init;
+  fra.me.line = 7756;
+  fra.me.meth = LOCATE_parser___ReduceAction220___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39726 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7756 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1034] = 1;
+  init_table[itpos220] = 1;
   return;
 }
-void parser___ReduceAction1031___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction221___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 = 39730;
-  fra.me.meth = LOCATE_parser___ReduceAction1031___action;
+  fra.me.line = 7760;
+  fra.me.meth = LOCATE_parser___ReduceAction221___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7762 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7763 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39742);
-    nit_exit(1);
-  }
-  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:39744 */
+  /* ./parser//parser.nit:7766 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39744);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7766);
   }
-  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:39746 */
+  /* ./parser//parser.nit:7768 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39746);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7768);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39752 */
+  /* ./parser//parser.nit:7769 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7774 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7775 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction221____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39752);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7775);
   }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction221____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39761 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1031___init(val_t p0, int* init_table){
-  int itpos1035 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1031].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
+  int itpos221 = 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[itpos1035]) return;
+  if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39763;
-  fra.me.meth = LOCATE_parser___ReduceAction1031___init;
+  fra.me.line = 7778;
+  fra.me.meth = LOCATE_parser___ReduceAction221___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39763 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7778 */
+  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[itpos1035] = 1;
+  init_table[itpos221] = 1;
   return;
 }
-void parser___ReduceAction1032___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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 = 39767;
-  fra.me.meth = LOCATE_parser___ReduceAction1032___action;
+  fra.me.line = 7782;
+  fra.me.meth = LOCATE_parser___ReduceAction222___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7784 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7786 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39778);
-    nit_exit(1);
-  }
-  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:39780 */
+  /* ./parser//parser.nit:7788 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39780);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7788);
   }
-  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:39782 */
+  /* ./parser//parser.nit:7790 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39782);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7790);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:39788 */
+  /* ./parser//parser.nit:7791 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:7796 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7797 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction222____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39788);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7797);
   }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction222____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39797 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1032___init(val_t p0, int* init_table){
-  int itpos1036 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1032].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
+  int itpos222 = 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[itpos1036]) return;
+  if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39799;
-  fra.me.meth = LOCATE_parser___ReduceAction1032___init;
+  fra.me.line = 7800;
+  fra.me.meth = LOCATE_parser___ReduceAction222___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39799 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7800 */
+  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[itpos1036] = 1;
+  init_table[itpos222] = 1;
   return;
 }
-void parser___ReduceAction1033___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[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 = 39803;
-  fra.me.meth = LOCATE_parser___ReduceAction1033___action;
+  fra.me.line = 7804;
+  fra.me.meth = LOCATE_parser___ReduceAction223___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -106253,82 +26323,80 @@ void parser___ReduceAction1033___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7806 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7807 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7808 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7809 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
-  /* ./parser//parser.nit:39813 */
+  /* ./parser//parser.nit:7811 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39813);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7811);
   }
-  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:39815 */
+  /* ./parser//parser.nit:7813 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39815);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7813);
   }
-  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:39817 */
+  /* ./parser//parser.nit:7815 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39817);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7815);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39819 */
+  /* ./parser//parser.nit:7816 */
+  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:7821 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7822 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction223____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39819);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7822);
   }
-  fra.me.REG[2] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(99);
+  REGB0 = ATTR_parser___ReduceAction223____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39828 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1033___init(val_t p0, int* init_table){
-  int itpos1037 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1033].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
+  int itpos223 = 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[itpos1037]) return;
+  if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39830;
-  fra.me.meth = LOCATE_parser___ReduceAction1033___init;
+  fra.me.line = 7825;
+  fra.me.meth = LOCATE_parser___ReduceAction223___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39830 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7825 */
+  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[itpos1037] = 1;
+  init_table[itpos223] = 1;
   return;
 }
-void parser___ReduceAction1034___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[7];} fra;
   val_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 = 39834;
-  fra.me.meth = LOCATE_parser___ReduceAction1034___action;
+  fra.me.line = 7829;
+  fra.me.meth = LOCATE_parser___ReduceAction230___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -106341,119 +26409,93 @@ void parser___ReduceAction1034___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7831 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7832 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7833 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7834 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7835 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7836 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:39851 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39851);
-    nit_exit(1);
-  }
-  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:39853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39853);
-    nit_exit(1);
-  }
-  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:39855 */
+  /* ./parser//parser.nit:7837 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7838 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7840 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39855);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7840);
   }
-  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:39857 */
+  /* ./parser//parser.nit:7842 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39857);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7842);
   }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:39860 */
+  /* ./parser//parser.nit:7844 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39860);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7844);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:39861 */
+  /* ./parser//parser.nit:7845 */
+  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:7846 */
+  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:7852 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:7853 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction230____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39862 */
-    array___Array___add(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7853);
   }
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  fra.me.REG[7] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction230____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39876 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1034___init(val_t p0, int* init_table){
-  int itpos1038 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1034].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
+  int itpos224 = 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[itpos1038]) return;
+  if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39878;
-  fra.me.meth = LOCATE_parser___ReduceAction1034___init;
+  fra.me.line = 7856;
+  fra.me.meth = LOCATE_parser___ReduceAction230___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39878 */
+  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___ReduceAction230____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1038] = 1;
+  init_table[itpos224] = 1;
   return;
 }
-void parser___ReduceAction1035___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction231___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_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 = 39882;
-  fra.me.meth = LOCATE_parser___ReduceAction1035___action;
+  fra.me.line = 7860;
+  fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -106462,139 +26504,85 @@ void parser___ReduceAction1035___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./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]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:39900 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39900);
-    nit_exit(1);
-  }
-  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:39902 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39902);
-    nit_exit(1);
-  }
-  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:39904 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39904);
-    nit_exit(1);
-  }
-  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:39906 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39906);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:39909 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39909);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:39911 */
+  /* ./parser//parser.nit:7865 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7866 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7867 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:7870 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39911);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7870);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:39912 */
+  /* ./parser//parser.nit:7872 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:39913 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7872);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser.nit:39916 */
+  /* ./parser//parser.nit:7873 */
+  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:7874 */
+  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:7880 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7881 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction231____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[8] = fra.me.REG[2];
-  /* ./parser//parser.nit:39917 */
   } else {
-    /* ./parser//parser.nit:39919 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7881);
   }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  fra.me.REG[8] = 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[8], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[8];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction231____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39934 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1035___init(val_t p0, int* init_table){
-  int itpos1039 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1035].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
+  int itpos225 = 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[itpos1039]) return;
+  if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39936;
-  fra.me.meth = LOCATE_parser___ReduceAction1035___init;
+  fra.me.line = 7884;
+  fra.me.meth = LOCATE_parser___ReduceAction231___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39936 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7884 */
+  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[itpos1039] = 1;
+  init_table[itpos225] = 1;
   return;
 }
-void parser___ReduceAction1036___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction232___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 = 39940;
-  fra.me.meth = LOCATE_parser___ReduceAction1036___action;
+  fra.me.line = 7888;
+  fra.me.meth = LOCATE_parser___ReduceAction232___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -106602,92 +26590,108 @@ void parser___ReduceAction1036___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7890 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7891 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7892 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7893 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:39955 */
+  /* ./parser//parser.nit:7894 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7895 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7896 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7897 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7898 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7900 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39955);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7900);
   }
-  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:39957 */
+  /* ./parser//parser.nit:7902 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39957);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7902);
   }
-  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:39959 */
+  /* ./parser//parser.nit:7904 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39959);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7904);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:39961 */
+  /* ./parser//parser.nit:7905 */
+  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:7907 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39961);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7907);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(100);
+  /* ./parser//parser.nit:7908 */
+  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:7909 */
+  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:7915 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* ./parser//parser.nit:7916 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction232____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7916);
+  }
+  REGB0 = ATTR_parser___ReduceAction232____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:39975 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1036___init(val_t p0, int* init_table){
-  int itpos1040 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1036].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
+  int itpos226 = 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[itpos1040]) return;
+  if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 39977;
-  fra.me.meth = LOCATE_parser___ReduceAction1036___init;
+  fra.me.line = 7919;
+  fra.me.meth = LOCATE_parser___ReduceAction232___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:39977 */
+  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___ReduceAction232____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1040] = 1;
+  init_table[itpos226] = 1;
   return;
 }
-void parser___ReduceAction1037___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction233___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 = 39981;
-  fra.me.meth = LOCATE_parser___ReduceAction1037___action;
+  fra.me.line = 7923;
+  fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -106695,225 +26699,179 @@ void parser___ReduceAction1037___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7925 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7926 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7927 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7928 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:39995 */
+  /* ./parser//parser.nit:7929 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7930 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7931 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:7934 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39995);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7934);
   }
-  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:39997 */
+  /* ./parser//parser.nit:7936 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39997);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7936);
   }
-  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:39999 */
+  /* ./parser//parser.nit:7937 */
+  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:7939 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 39999);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7939);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
-  /* ./parser//parser.nit:40001 */
+  /* ./parser//parser.nit:7940 */
+  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:7941 */
+  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:7947 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:7948 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction233____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40001);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7948);
   }
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6]);
-  fra.me.REG[6] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], fra.me.REG[6], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction233____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40015 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1037___init(val_t p0, int* init_table){
-  int itpos1041 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1037].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
+  int itpos227 = 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[itpos1041]) return;
+  if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40017;
-  fra.me.meth = LOCATE_parser___ReduceAction1037___init;
+  fra.me.line = 7951;
+  fra.me.meth = LOCATE_parser___ReduceAction233___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40017 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7951 */
+  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[itpos1041] = 1;
+  init_table[itpos227] = 1;
   return;
 }
-void parser___ReduceAction1038___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40021;
-  fra.me.meth = LOCATE_parser___ReduceAction1038___action;
+  fra.me.line = 7955;
+  fra.me.meth = LOCATE_parser___ReduceAction234___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7957 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7958 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7959 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40039 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40039);
-    nit_exit(1);
-  }
-  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:40041 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40041);
-    nit_exit(1);
-  }
-  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:40043 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40043);
-    nit_exit(1);
-  }
-  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:40045 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40045);
-    nit_exit(1);
-  }
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  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:40048 */
+  /* ./parser//parser.nit:7960 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7962 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40048);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7962);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser.nit:40049 */
+  /* ./parser//parser.nit:7964 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:40050 */
-    array___Array___add(fra.me.REG[8], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7964);
   }
-  fra.me.REG[8] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[8]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:40056 */
+  /* ./parser//parser.nit:7965 */
+  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:7966 */
+  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:7971 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7972 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction234____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40056);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7972);
   }
-  fra.me.REG[2] = 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[8], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction234____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40066 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1038___init(val_t p0, int* init_table){
-  int itpos1042 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1038].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
+  int itpos228 = 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[itpos1042]) return;
+  if (init_table[itpos228]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40068;
-  fra.me.meth = LOCATE_parser___ReduceAction1038___init;
+  fra.me.line = 7975;
+  fra.me.meth = LOCATE_parser___ReduceAction234___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40068 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:7975 */
+  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[itpos1042] = 1;
+  init_table[itpos228] = 1;
   return;
 }
-void parser___ReduceAction1039___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40072;
-  fra.me.meth = LOCATE_parser___ReduceAction1039___action;
+  fra.me.line = 7979;
+  fra.me.meth = LOCATE_parser___ReduceAction235___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -106921,150 +26879,89 @@ void parser___ReduceAction1039___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7981 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7982 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7983 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7984 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40091);
-    nit_exit(1);
-  }
-  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:40093 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40093);
-    nit_exit(1);
-  }
-  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:40095 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40095);
-    nit_exit(1);
-  }
-  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:40097 */
+  /* ./parser//parser.nit:7985 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:7987 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40097);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7987);
   }
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  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:40100 */
+  /* ./parser//parser.nit:7989 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40100);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7989);
   }
+  /* ./parser//parser.nit:7991 */
   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:40102 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40102);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser.nit:40103 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:40104 */
-    array___Array___add(fra.me.REG[9], fra.me.REG[4]);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[9])(fra.me.REG[9]);
-  /* ./parser//parser.nit:40107 */
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:40108 */
   } else {
-    /* ./parser//parser.nit:40110 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7991);
   }
-  fra.me.REG[9] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[9]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:40117 */
+  /* ./parser//parser.nit:7992 */
+  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:7993 */
+  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:7998 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7999 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction235____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40117);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7999);
   }
-  fra.me.REG[2] = 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[9], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction235____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40127 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1039___init(val_t p0, int* init_table){
-  int itpos1043 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1039].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
+  int itpos229 = 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[itpos1043]) return;
+  if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40129;
-  fra.me.meth = LOCATE_parser___ReduceAction1039___init;
+  fra.me.line = 8002;
+  fra.me.meth = LOCATE_parser___ReduceAction235___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40129 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8002 */
+  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[itpos1043] = 1;
+  init_table[itpos229] = 1;
   return;
 }
-void parser___ReduceAction1040___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction236___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 = 40133;
-  fra.me.meth = LOCATE_parser___ReduceAction1040___action;
+  fra.me.line = 8006;
+  fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -107072,300 +26969,251 @@ void parser___ReduceAction1040___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8008 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8009 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8010 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8011 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8012 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8013 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:40149 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40149);
-    nit_exit(1);
-  }
-  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:40151 */
+  /* ./parser//parser.nit:8014 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8016 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40151);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8016);
   }
-  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:40153 */
+  /* ./parser//parser.nit:8018 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40153);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8018);
   }
-  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:40155 */
+  /* ./parser//parser.nit:8020 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40155);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8020);
   }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:40161 */
+  /* ./parser//parser.nit:8021 */
+  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:8022 */
+  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:8027 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:8028 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction236____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40161);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8028);
   }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction236____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40171 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1040___init(val_t p0, int* init_table){
-  int itpos1044 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1040].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
+  int itpos230 = 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[itpos1044]) return;
+  if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40173;
-  fra.me.meth = LOCATE_parser___ReduceAction1040___init;
+  fra.me.line = 8031;
+  fra.me.meth = LOCATE_parser___ReduceAction236___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40173 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8031 */
+  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[itpos1044] = 1;
+  init_table[itpos230] = 1;
   return;
 }
-void parser___ReduceAction1041___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction237___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 = 40177;
-  fra.me.meth = LOCATE_parser___ReduceAction1041___action;
+  fra.me.line = 8035;
+  fra.me.meth = LOCATE_parser___ReduceAction237___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:40192 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40192);
-    nit_exit(1);
-  }
-  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:40194 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40194);
-    nit_exit(1);
-  }
-  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:40196 */
+  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:8037 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8038 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8039 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8040 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8041 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8044 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40196);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8044);
   }
-  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:40198 */
+  /* ./parser//parser.nit:8046 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40198);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8046);
   }
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[7]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
-  /* ./parser//parser.nit:40204 */
+  /* ./parser//parser.nit:8047 */
+  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:8048 */
+  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:8053 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8054 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction237____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40204);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8054);
   }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction237____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40214 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1041___init(val_t p0, int* init_table){
-  int itpos1045 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1041].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
+  int itpos231 = 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[itpos1045]) return;
+  if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40216;
-  fra.me.meth = LOCATE_parser___ReduceAction1041___init;
+  fra.me.line = 8057;
+  fra.me.meth = LOCATE_parser___ReduceAction237___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40216 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8057 */
+  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[itpos1045] = 1;
+  init_table[itpos231] = 1;
   return;
 }
-void parser___ReduceAction1042___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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 = 40220;
-  fra.me.meth = LOCATE_parser___ReduceAction1042___action;
+  fra.me.line = 8061;
+  fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8063 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8065 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
-  /* ./parser//parser.nit:40234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40234);
-    nit_exit(1);
-  }
-  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:40236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40236);
-    nit_exit(1);
-  }
-  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:40238 */
+  /* ./parser//parser.nit:8067 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwlabel, ID_TKwlabel)) /*cast nullable TKwlabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40238);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8067);
   }
-  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:40240 */
+  /* ./parser//parser.nit:8069 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40240);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8069);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40242 */
+  /* ./parser//parser.nit:8070 */
+  fra.me.REG[3] = NEW_ALabel_parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:8074 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8075 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction238____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40242);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8075);
   }
-  fra.me.REG[2] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2], NIT_NULL);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(100);
+  REGB0 = ATTR_parser___ReduceAction238____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40252 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1042___init(val_t p0, int* init_table){
-  int itpos1046 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1042].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
+  int itpos232 = 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[itpos1046]) return;
+  if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40254;
-  fra.me.meth = LOCATE_parser___ReduceAction1042___init;
+  fra.me.line = 8078;
+  fra.me.meth = LOCATE_parser___ReduceAction238___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40254 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8078 */
+  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[itpos1046] = 1;
+  init_table[itpos232] = 1;
   return;
 }
-void parser___ReduceAction1043___action(val_t p0, val_t p1){
+void parser___ReduceAction239___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 = 40258;
-  fra.me.meth = LOCATE_parser___ReduceAction1043___action;
+  fra.me.line = 8082;
+  fra.me.meth = LOCATE_parser___ReduceAction239___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -107375,71 +27223,77 @@ void parser___ReduceAction1043___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8084 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8085 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40266 */
+  /* ./parser//parser.nit:8086 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8088 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40266);
-    nit_exit(1);
+    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((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40268 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40268);
-    nit_exit(1);
+    /* ./parser//parser.nit:8089 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40270 */
+  /* ./parser//parser.nit:8091 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:8092 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction239____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40270);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8092);
   }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(101);
+  REGB0 = ATTR_parser___ReduceAction239____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40278 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1043___init(val_t p0, int* init_table){
-  int itpos1047 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1043].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
+  int itpos233 = 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[itpos1047]) return;
+  if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40280;
-  fra.me.meth = LOCATE_parser___ReduceAction1043___init;
+  fra.me.line = 8095;
+  fra.me.meth = LOCATE_parser___ReduceAction239___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40280 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8095 */
+  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[itpos1047] = 1;
+  init_table[itpos233] = 1;
   return;
 }
-void parser___ReduceAction1044___action(val_t p0, val_t p1){
+void parser___ReduceAction240___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 = 40284;
-  fra.me.meth = LOCATE_parser___ReduceAction1044___action;
+  fra.me.line = 8099;
+  fra.me.meth = LOCATE_parser___ReduceAction240___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -107450,134 +27304,194 @@ void parser___ReduceAction1044___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8101 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8103 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40293 */
+  /* ./parser//parser.nit:8104 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8107 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40293);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8107);
   }
-  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:40295 */
+  /* ./parser//parser.nit:8108 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40295);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40297 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40297);
-    nit_exit(1);
+    /* ./parser//parser.nit:8109 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40299 */
+  /* ./parser//parser.nit:8111 */
+  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:8112 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:8113 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction240____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40299);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8113);
   }
-  fra.me.REG[2] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(101);
+  REGB0 = ATTR_parser___ReduceAction240____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40307 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1044___init(val_t p0, int* init_table){
-  int itpos1048 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1044].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction240___init(val_t p0, val_t p1, int* init_table){
+  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction240].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1048]) return;
+  if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40309;
-  fra.me.meth = LOCATE_parser___ReduceAction1044___init;
+  fra.me.line = 8116;
+  fra.me.meth = LOCATE_parser___ReduceAction240___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40309 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8116 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction240____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1048] = 1;
+  init_table[itpos234] = 1;
   return;
 }
-void parser___ReduceAction1045___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction241___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 = 40313;
-  fra.me.meth = LOCATE_parser___ReduceAction1045___action;
+  fra.me.line = 8120;
+  fra.me.meth = LOCATE_parser___ReduceAction241___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40318 */
+  /* ./parser//parser.nit:8122 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8123 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8124 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8125 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8126 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8127 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8128 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40318);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8130);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(102);
+  /* ./parser//parser.nit:8132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8132);
+  }
+  /* ./parser//parser.nit:8134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8134);
+  }
+  /* ./parser//parser.nit:8136 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8136);
+  }
+  /* ./parser//parser.nit:8138 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8138);
+  }
+  /* ./parser//parser.nit:8139 */
+  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:8147 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8148 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction241____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8148);
+  }
+  REGB0 = ATTR_parser___ReduceAction241____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40320 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1045___init(val_t p0, int* init_table){
-  int itpos1049 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1045].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction241___init(val_t p0, val_t p1, int* init_table){
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction241].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1049]) return;
+  if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40322;
-  fra.me.meth = LOCATE_parser___ReduceAction1045___init;
+  fra.me.line = 8151;
+  fra.me.meth = LOCATE_parser___ReduceAction241___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40322 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8151 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction241____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1049] = 1;
+  init_table[itpos235] = 1;
   return;
 }
-void parser___ReduceAction1046___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction242___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 = 40326;
-  fra.me.meth = LOCATE_parser___ReduceAction1046___action;
+  fra.me.line = 8155;
+  fra.me.meth = LOCATE_parser___ReduceAction242___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -107586,103 +27500,113 @@ void parser___ReduceAction1046___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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8157 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8160 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:40338 */
+  /* ./parser//parser.nit:8161 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8162 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8163 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8164 */
+  fra.me.REG[9] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8166 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40338);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8166);
   }
-  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:40340 */
+  /* ./parser//parser.nit:8168 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40340);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8168);
   }
-  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:40342 */
+  /* ./parser//parser.nit:8170 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8170);
+  }
+  /* ./parser//parser.nit:8171 */
+  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:8173 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40342);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8173);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40344 */
+  /* ./parser//parser.nit:8175 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:40345 */
   } else {
-    /* ./parser//parser.nit:40347 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8175);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40351 */
+  /* ./parser//parser.nit:8177 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40351);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8177);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:40353 */
+  /* ./parser//parser.nit:8178 */
+  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:8186 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8187 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction242____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:40354 */
   } else {
-    /* ./parser//parser.nit:40356 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8187);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(102);
+  REGB0 = ATTR_parser___ReduceAction242____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40366 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1046___init(val_t p0, int* init_table){
-  int itpos1050 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1046].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction242___init(val_t p0, val_t p1, int* init_table){
+  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction242].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1050]) return;
+  if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40368;
-  fra.me.meth = LOCATE_parser___ReduceAction1046___init;
+  fra.me.line = 8190;
+  fra.me.meth = LOCATE_parser___ReduceAction242___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40368 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8190 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction242____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1050] = 1;
+  init_table[itpos236] = 1;
   return;
 }
-void parser___ReduceAction1047___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[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 = 40372;
-  fra.me.meth = LOCATE_parser___ReduceAction1047___action;
+  fra.me.line = 8194;
+  fra.me.meth = LOCATE_parser___ReduceAction243___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -107695,93 +27619,92 @@ void parser___ReduceAction1047___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8196 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8197 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8198 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:40383 */
+  /* ./parser//parser.nit:8199 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8200 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8201 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8203 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40383);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8203);
   }
-  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:40385 */
+  /* ./parser//parser.nit:8205 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40385);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8205);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:40387 */
+  /* ./parser//parser.nit:8207 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:40388 */
   } else {
-    /* ./parser//parser.nit:40390 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8207);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40394 */
+  /* ./parser//parser.nit:8209 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40394);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8209);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40396 */
+  /* ./parser//parser.nit:8210 */
+  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:8218 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8219 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction243____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:40397 */
   } else {
-    /* ./parser//parser.nit:40399 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8219);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(102);
+  REGB0 = ATTR_parser___ReduceAction243____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40409 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1047___init(val_t p0, int* init_table){
-  int itpos1051 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1047].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction243___init(val_t p0, val_t p1, int* init_table){
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction243].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1051]) return;
+  if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40411;
-  fra.me.meth = LOCATE_parser___ReduceAction1047___init;
+  fra.me.line = 8222;
+  fra.me.meth = LOCATE_parser___ReduceAction243___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40411 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8222 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction243____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1051] = 1;
+  init_table[itpos237] = 1;
   return;
 }
-void parser___ReduceAction1048___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction244___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 = 40415;
-  fra.me.meth = LOCATE_parser___ReduceAction1048___action;
+  fra.me.line = 8226;
+  fra.me.meth = LOCATE_parser___ReduceAction244___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -107789,144 +27712,196 @@ void parser___ReduceAction1048___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8228 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:40424 */
+  /* ./parser//parser.nit:8231 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8232 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8233 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8234 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8236 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40424);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8236);
   }
-  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:40426 */
+  /* ./parser//parser.nit:8238 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8238);
+  }
+  /* ./parser//parser.nit:8240 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40426);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8240);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:40428 */
+  /* ./parser//parser.nit:8241 */
+  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:8243 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:40429 */
   } else {
-    /* ./parser//parser.nit:40431 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8243);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40435 */
+  /* ./parser//parser.nit:8245 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40435);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8245);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40437 */
+  /* ./parser//parser.nit:8246 */
+  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:8254 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8255 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction244____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:40438 */
   } else {
-    /* ./parser//parser.nit:40440 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8255);
   }
-  fra.me.REG[6] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(102);
+  REGB0 = ATTR_parser___ReduceAction244____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40449 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1048___init(val_t p0, int* init_table){
-  int itpos1052 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1048].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction244___init(val_t p0, val_t p1, int* init_table){
+  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction244].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1052]) return;
+  if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40451;
-  fra.me.meth = LOCATE_parser___ReduceAction1048___init;
+  fra.me.line = 8258;
+  fra.me.meth = LOCATE_parser___ReduceAction244___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40451 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8258 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction244____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1052] = 1;
+  init_table[itpos238] = 1;
   return;
 }
-void parser___ReduceAction1049___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction245___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 = 40455;
-  fra.me.meth = LOCATE_parser___ReduceAction1049___action;
+  fra.me.line = 8262;
+  fra.me.meth = LOCATE_parser___ReduceAction245___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40460 */
+  /* ./parser//parser.nit:8264 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8265 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8266 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8267 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8268 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8269 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8270 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8272 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40460);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8272);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(103);
+  /* ./parser//parser.nit:8274 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8274);
+  }
+  /* ./parser//parser.nit:8276 */
+  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, 8276);
+  }
+  /* ./parser//parser.nit:8277 */
+  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:8285 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8286 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction245____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8286);
+  }
+  REGB0 = ATTR_parser___ReduceAction245____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40462 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1049___init(val_t p0, int* init_table){
-  int itpos1053 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1049].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction245___init(val_t p0, val_t p1, int* init_table){
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction245].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1053]) return;
+  if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40464;
-  fra.me.meth = LOCATE_parser___ReduceAction1049___init;
+  fra.me.line = 8289;
+  fra.me.meth = LOCATE_parser___ReduceAction245___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40464 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8289 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction245____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1053] = 1;
+  init_table[itpos239] = 1;
   return;
 }
-void parser___ReduceAction1050___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[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 = 40468;
-  fra.me.meth = LOCATE_parser___ReduceAction1050___action;
+  fra.me.line = 8293;
+  fra.me.meth = LOCATE_parser___ReduceAction246___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -107939,101 +27914,97 @@ void parser___ReduceAction1050___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8295 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8296 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8298 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8299 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8300 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8301 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8302 */
   fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:40480 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40480);
-    nit_exit(1);
-  }
-  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:40482 */
+  /* ./parser//parser.nit:8304 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40482);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8304);
   }
-  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:40484 */
+  /* ./parser//parser.nit:8306 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40484);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8306);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40486 */
+  /* ./parser//parser.nit:8308 */
+  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)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:40487 */
   } else {
-    /* ./parser//parser.nit:40489 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8308);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40493 */
+  /* ./parser//parser.nit:8309 */
+  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:8311 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40493);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8311);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:40495 */
+  /* ./parser//parser.nit:8312 */
+  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:8320 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8321 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction246____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:40496 */
   } else {
-    /* ./parser//parser.nit:40498 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8321);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(103);
+  REGB0 = ATTR_parser___ReduceAction246____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40508 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1050___init(val_t p0, int* init_table){
-  int itpos1054 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1050].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction246___init(val_t p0, val_t p1, int* init_table){
+  int itpos240 = 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[itpos1054]) return;
+  if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40510;
-  fra.me.meth = LOCATE_parser___ReduceAction1050___init;
+  fra.me.line = 8324;
+  fra.me.meth = LOCATE_parser___ReduceAction246___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40510 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8324 */
+  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[itpos1054] = 1;
+  init_table[itpos240] = 1;
   return;
 }
-void parser___ReduceAction1051___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[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 = 40514;
-  fra.me.meth = LOCATE_parser___ReduceAction1051___action;
+  fra.me.line = 8328;
+  fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -108046,145 +28017,204 @@ void parser___ReduceAction1051___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8330 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8331 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8332 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:40525 */
+  /* ./parser//parser.nit:8333 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8334 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8335 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8336 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8338 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40525);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8338);
   }
-  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:40527 */
+  /* ./parser//parser.nit:8340 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40527);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8340);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:40529 */
+  /* ./parser//parser.nit:8342 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:40530 */
   } else {
-    /* ./parser//parser.nit:40532 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8342);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40536 */
+  /* ./parser//parser.nit:8344 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40536);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8344);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40538 */
+  /* ./parser//parser.nit:8345 */
+  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:8353 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8354 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction247____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:40539 */
   } else {
-    /* ./parser//parser.nit:40541 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8354);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(103);
+  REGB0 = ATTR_parser___ReduceAction247____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40551 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1051___init(val_t p0, int* init_table){
-  int itpos1055 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1051].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
+  int itpos241 = 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[itpos1055]) return;
+  if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40553;
-  fra.me.meth = LOCATE_parser___ReduceAction1051___init;
+  fra.me.line = 8357;
+  fra.me.meth = LOCATE_parser___ReduceAction247___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40553 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8357 */
+  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[itpos1055] = 1;
+  init_table[itpos241] = 1;
   return;
 }
-void parser___ReduceAction1052___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction248___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 = 40557;
-  fra.me.meth = LOCATE_parser___ReduceAction1052___action;
+  fra.me.line = 8361;
+  fra.me.meth = LOCATE_parser___ReduceAction248___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40562 */
+  /* ./parser//parser.nit:8363 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8364 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8365 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8366 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8367 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8368 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8369 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8370 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8372 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40562);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8372);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(104);
+  /* ./parser//parser.nit:8374 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8374);
+  }
+  /* ./parser//parser.nit:8376 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8376);
+  }
+  /* ./parser//parser.nit:8377 */
+  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:8379 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8379);
+  }
+  /* ./parser//parser.nit:8381 */
+  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, 8381);
+  }
+  /* ./parser//parser.nit:8382 */
+  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:8390 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8391 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction248____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8391);
+  }
+  REGB0 = ATTR_parser___ReduceAction248____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40564 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1052___init(val_t p0, int* init_table){
-  int itpos1056 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1052].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
+  int itpos242 = 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[itpos1056]) return;
+  if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40566;
-  fra.me.meth = LOCATE_parser___ReduceAction1052___init;
+  fra.me.line = 8394;
+  fra.me.meth = LOCATE_parser___ReduceAction248___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40566 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8394 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1056] = 1;
+  init_table[itpos242] = 1;
   return;
 }
-void parser___ReduceAction1053___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} 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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40570;
-  fra.me.meth = LOCATE_parser___ReduceAction1053___action;
+  fra.me.line = 8398;
+  fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -108192,104 +28222,86 @@ void parser___ReduceAction1053___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8400 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8401 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8402 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8403 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8404 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8405 */
   fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:40582 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40582);
-    nit_exit(1);
-  }
-  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:40584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40584);
-    nit_exit(1);
-  }
-  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:40586 */
+  /* ./parser//parser.nit:8407 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40586);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8407);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40588 */
+  /* ./parser//parser.nit:8409 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:40589 */
   } else {
-    /* ./parser//parser.nit:40591 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8409);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40595 */
+  /* ./parser//parser.nit:8411 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40595);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8411);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:40597 */
+  /* ./parser//parser.nit:8412 */
+  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:8420 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8421 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction249____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:40598 */
   } else {
-    /* ./parser//parser.nit:40600 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8421);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(104);
+  REGB0 = ATTR_parser___ReduceAction249____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40610 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1053___init(val_t p0, int* init_table){
-  int itpos1057 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1053].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
+  int itpos243 = 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[itpos1057]) return;
+  if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40612;
-  fra.me.meth = LOCATE_parser___ReduceAction1053___init;
+  fra.me.line = 8424;
+  fra.me.meth = LOCATE_parser___ReduceAction249___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40612 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8424 */
+  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[itpos1057] = 1;
+  init_table[itpos243] = 1;
   return;
 }
-void parser___ReduceAction1054___action(val_t p0, val_t p1){
+void parser___ReduceAction250___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 = 40616;
-  fra.me.meth = LOCATE_parser___ReduceAction1054___action;
+  fra.me.line = 8428;
+  fra.me.meth = LOCATE_parser___ReduceAction250___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -108302,1238 +28314,1711 @@ void parser___ReduceAction1054___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8430 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8431 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8432 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8433 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:40627 */
+  /* ./parser//parser.nit:8434 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8435 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8436 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8438 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40627);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 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:40629 */
+  /* ./parser//parser.nit:8440 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40629);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8440);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:40631 */
+  /* ./parser//parser.nit:8442 */
+  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)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:40632 */
   } else {
-    /* ./parser//parser.nit:40634 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8442);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:40638 */
+  /* ./parser//parser.nit:8443 */
+  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:8445 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40638);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8445);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:40640 */
+  /* ./parser//parser.nit:8446 */
+  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:8454 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8455 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction250____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:40641 */
   } else {
-    /* ./parser//parser.nit:40643 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8455);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(104);
+  REGB0 = ATTR_parser___ReduceAction250____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40653 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1054___init(val_t p0, int* init_table){
-  int itpos1058 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1054].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
+  int itpos244 = 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[itpos1058]) return;
+  if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40655;
-  fra.me.meth = LOCATE_parser___ReduceAction1054___init;
+  fra.me.line = 8458;
+  fra.me.meth = LOCATE_parser___ReduceAction250___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40655 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8458 */
+  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[itpos1058] = 1;
+  init_table[itpos244] = 1;
   return;
 }
-void parser___ReduceAction1055___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction251___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 = 40659;
-  fra.me.meth = LOCATE_parser___ReduceAction1055___action;
+  fra.me.line = 8462;
+  fra.me.meth = LOCATE_parser___ReduceAction251___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40664 */
+  /* ./parser//parser.nit:8464 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8465 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8467 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40664);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8467);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(105);
+  /* ./parser//parser.nit:8468 */
+  fra.me.REG[3] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
+  /* ./parser//parser.nit:8471 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8472 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction251____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8472);
+  }
+  REGB0 = ATTR_parser___ReduceAction251____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40666 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1055___init(val_t p0, int* init_table){
-  int itpos1059 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1055].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
+  int itpos245 = 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[itpos1059]) return;
+  if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40668;
-  fra.me.meth = LOCATE_parser___ReduceAction1055___init;
+  fra.me.line = 8475;
+  fra.me.meth = LOCATE_parser___ReduceAction251___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40668 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8475 */
+  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[itpos1059] = 1;
+  init_table[itpos245] = 1;
   return;
 }
-void parser___ReduceAction1056___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction252___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 = 40672;
-  fra.me.meth = LOCATE_parser___ReduceAction1056___action;
+  fra.me.line = 8479;
+  fra.me.meth = LOCATE_parser___ReduceAction252___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8481 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8482 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:40687 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40687);
-    nit_exit(1);
-  }
-  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:40689 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40689);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
-  /* ./parser//parser.nit:40691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40691);
-    nit_exit(1);
-  }
-  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:40693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40693);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
-  /* ./parser//parser.nit:40695 */
+  /* ./parser//parser.nit:8484 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40695);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8484);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40697 */
+  /* ./parser//parser.nit:8485 */
+  fra.me.REG[3] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
+  /* ./parser//parser.nit:8488 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8489 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction252____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40697);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8489);
   }
-  fra.me.REG[2] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(105);
+  REGB0 = ATTR_parser___ReduceAction252____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40707 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1056___init(val_t p0, int* init_table){
-  int itpos1060 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1056].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
+  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction252].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1060]) return;
+  if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40709;
-  fra.me.meth = LOCATE_parser___ReduceAction1056___init;
+  fra.me.line = 8492;
+  fra.me.meth = LOCATE_parser___ReduceAction252___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40709 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8492 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1060] = 1;
+  init_table[itpos246] = 1;
   return;
 }
-void parser___ReduceAction1057___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 40713;
-  fra.me.meth = LOCATE_parser___ReduceAction1057___action;
+  fra.me.line = 8496;
+  fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40718 */
+  /* ./parser//parser.nit:8498 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8499 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8501 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40718);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8501);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(106);
+  /* ./parser//parser.nit:8502 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:8507 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8508 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction253____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8508);
+  }
+  REGB0 = ATTR_parser___ReduceAction253____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40720 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1057___init(val_t p0, int* init_table){
-  int itpos1061 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1057].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
+  int itpos247 = 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[itpos1061]) return;
+  if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40722;
-  fra.me.meth = LOCATE_parser___ReduceAction1057___init;
+  fra.me.line = 8511;
+  fra.me.meth = LOCATE_parser___ReduceAction253___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40722 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8511 */
+  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[itpos1061] = 1;
+  init_table[itpos247] = 1;
   return;
 }
-void parser___ReduceAction1058___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 40726;
-  fra.me.meth = LOCATE_parser___ReduceAction1058___action;
+  fra.me.line = 8515;
+  fra.me.meth = LOCATE_parser___ReduceAction254___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8517 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8518 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40734 */
+  /* ./parser//parser.nit:8519 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8521 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8521);
+  }
+  /* ./parser//parser.nit:8523 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40734);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8523);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40736 */
+  /* ./parser//parser.nit:8524 */
+  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:8531 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8532 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction254____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40736);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8532);
   }
-  fra.me.REG[2] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(106);
+  REGB0 = ATTR_parser___ReduceAction254____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40742 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1058___init(val_t p0, int* init_table){
-  int itpos1062 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1058].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
+  int itpos248 = 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[itpos1062]) return;
+  if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40744;
-  fra.me.meth = LOCATE_parser___ReduceAction1058___init;
+  fra.me.line = 8535;
+  fra.me.meth = LOCATE_parser___ReduceAction254___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40744 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8535 */
+  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[itpos1062] = 1;
+  init_table[itpos248] = 1;
   return;
 }
-void parser___ReduceAction1059___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction255___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 = 40748;
-  fra.me.meth = LOCATE_parser___ReduceAction1059___action;
+  fra.me.line = 8539;
+  fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8541 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8542 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:40756 */
+  /* ./parser//parser.nit:8543 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8544 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8546 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8546);
+  }
+  /* ./parser//parser.nit:8548 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40756);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8548);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40758 */
+  /* ./parser//parser.nit:8550 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40758);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8550);
   }
-  fra.me.REG[2] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(106);
+  /* ./parser//parser.nit:8551 */
+  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:8558 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8559 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction255____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8559);
+  }
+  REGB0 = ATTR_parser___ReduceAction255____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40764 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1059___init(val_t p0, int* init_table){
-  int itpos1063 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1059].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
+  int itpos249 = 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[itpos1063]) return;
+  if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40766;
-  fra.me.meth = LOCATE_parser___ReduceAction1059___init;
+  fra.me.line = 8562;
+  fra.me.meth = LOCATE_parser___ReduceAction255___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40766 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8562 */
+  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[itpos1063] = 1;
+  init_table[itpos249] = 1;
   return;
 }
-void parser___ReduceAction1060___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction256___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 = 40770;
-  fra.me.meth = LOCATE_parser___ReduceAction1060___action;
+  fra.me.line = 8566;
+  fra.me.meth = LOCATE_parser___ReduceAction256___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40775 */
+  /* ./parser//parser.nit:8568 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8569 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8570 */
+  fra.me.REG[4] = 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[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8573 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8575 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40775);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8575);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(107);
+  /* ./parser//parser.nit:8577 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8577);
+  }
+  /* ./parser//parser.nit:8579 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8579);
+  }
+  /* ./parser//parser.nit:8581 */
+  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, 8581);
+  }
+  /* ./parser//parser.nit:8582 */
+  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:8589 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8590 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction256____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8590);
+  }
+  REGB0 = ATTR_parser___ReduceAction256____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40777 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1060___init(val_t p0, int* init_table){
-  int itpos1064 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1060].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
+  int itpos250 = 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[itpos1064]) return;
+  if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40779;
-  fra.me.meth = LOCATE_parser___ReduceAction1060___init;
+  fra.me.line = 8593;
+  fra.me.meth = LOCATE_parser___ReduceAction256___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40779 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8593 */
+  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[itpos1064] = 1;
+  init_table[itpos250] = 1;
   return;
 }
-void parser___ReduceAction1061___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction257___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 = 40783;
-  fra.me.meth = LOCATE_parser___ReduceAction1061___action;
+  fra.me.line = 8597;
+  fra.me.meth = LOCATE_parser___ReduceAction257___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8599 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8600 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:40790 */
+  /* ./parser//parser.nit:8601 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8602 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8603 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8604 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8605 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8607 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40790);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8607);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40792 */
+  /* ./parser//parser.nit:8609 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40792);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8609);
   }
-  fra.me.REG[2] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(107);
+  /* ./parser//parser.nit:8611 */
+  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, 8611);
+  }
+  /* ./parser//parser.nit:8613 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8613);
+  }
+  /* ./parser//parser.nit:8615 */
+  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, 8615);
+  }
+  /* ./parser//parser.nit:8616 */
+  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:8623 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8624 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction257____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8624);
+  }
+  REGB0 = ATTR_parser___ReduceAction257____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40798 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1061___init(val_t p0, int* init_table){
-  int itpos1065 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1061].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction257].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1065]) return;
+  if (init_table[itpos251]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40800;
-  fra.me.meth = LOCATE_parser___ReduceAction1061___init;
+  fra.me.line = 8627;
+  fra.me.meth = LOCATE_parser___ReduceAction257___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40800 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8627 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1065] = 1;
+  init_table[itpos251] = 1;
   return;
 }
-void parser___ReduceAction1062___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction258___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 = 40804;
-  fra.me.meth = LOCATE_parser___ReduceAction1062___action;
+  fra.me.line = 8631;
+  fra.me.meth = LOCATE_parser___ReduceAction258___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40809 */
+  /* ./parser//parser.nit:8633 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8634 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8635 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8636 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8637 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8638 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8639 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8641 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40809);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8641);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  /* ./parser//parser.nit:8643 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8643);
+  }
+  /* ./parser//parser.nit:8645 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8645);
+  }
+  /* ./parser//parser.nit:8647 */
+  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, 8647);
+  }
+  /* ./parser//parser.nit:8648 */
+  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:8654 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8655 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction258____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8655);
+  }
+  REGB0 = ATTR_parser___ReduceAction258____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40811 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1062___init(val_t p0, int* init_table){
-  int itpos1066 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1062].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
+  int itpos252 = 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[itpos1066]) return;
+  if (init_table[itpos252]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40813;
-  fra.me.meth = LOCATE_parser___ReduceAction1062___init;
+  fra.me.line = 8658;
+  fra.me.meth = LOCATE_parser___ReduceAction258___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40813 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8658 */
+  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[itpos1066] = 1;
+  init_table[itpos252] = 1;
   return;
 }
-void parser___ReduceAction1063___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction259___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 = 40817;
-  fra.me.meth = LOCATE_parser___ReduceAction1063___action;
+  fra.me.line = 8662;
+  fra.me.meth = LOCATE_parser___ReduceAction259___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8664 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8665 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8666 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8667 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8668 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8671 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8671);
+  }
+  /* ./parser//parser.nit:8673 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8673);
+  }
+  /* ./parser//parser.nit:8675 */
   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:40825 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40825);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8675);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40827 */
+  /* ./parser//parser.nit:8676 */
+  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:8682 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8683 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction259____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40827);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8683);
   }
-  fra.me.REG[2] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction259____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40833 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1063___init(val_t p0, int* init_table){
-  int itpos1067 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1063].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
+  int itpos253 = 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[itpos1067]) return;
+  if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40835;
-  fra.me.meth = LOCATE_parser___ReduceAction1063___init;
+  fra.me.line = 8686;
+  fra.me.meth = LOCATE_parser___ReduceAction259___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40835 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8686 */
+  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[itpos1067] = 1;
+  init_table[itpos253] = 1;
   return;
 }
-void parser___ReduceAction1064___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction260___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 = 40839;
-  fra.me.meth = LOCATE_parser___ReduceAction1064___action;
+  fra.me.line = 8690;
+  fra.me.meth = LOCATE_parser___ReduceAction260___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8692 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8693 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8694 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8695 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8696 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8697 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8698 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8699 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8700 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8702 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8702);
+  }
+  /* ./parser//parser.nit:8704 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8704);
+  }
+  /* ./parser//parser.nit:8706 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8706);
+  }
+  /* ./parser//parser.nit:8707 */
+  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:8709 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8709);
+  }
+  /* ./parser//parser.nit:8711 */
   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:40847 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40847);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8711);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40849 */
+  /* ./parser//parser.nit:8712 */
+  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:8719 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8720 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction260____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40849);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8720);
   }
-  fra.me.REG[2] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction260____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40855 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1064___init(val_t p0, int* init_table){
-  int itpos1068 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1064].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
+  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction260].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1068]) return;
+  if (init_table[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40857;
-  fra.me.meth = LOCATE_parser___ReduceAction1064___init;
+  fra.me.line = 8723;
+  fra.me.meth = LOCATE_parser___ReduceAction260___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40857 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8723 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1068] = 1;
+  init_table[itpos254] = 1;
   return;
 }
-void parser___ReduceAction1065___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction261___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 = 40861;
-  fra.me.meth = LOCATE_parser___ReduceAction1065___action;
+  fra.me.line = 8727;
+  fra.me.meth = LOCATE_parser___ReduceAction261___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8729 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8731 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8732 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8733 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8734 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8735 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8738 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8738);
+  }
+  /* ./parser//parser.nit:8740 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8740);
+  }
+  /* ./parser//parser.nit:8741 */
+  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:8743 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8743);
+  }
+  /* ./parser//parser.nit:8745 */
   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:40869 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40869);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8745);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40871 */
+  /* ./parser//parser.nit:8746 */
+  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:8753 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8754 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction261____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40871);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8754);
   }
-  fra.me.REG[2] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction261____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40877 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1065___init(val_t p0, int* init_table){
-  int itpos1069 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1065].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
+  int itpos255 = 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[itpos1069]) return;
+  if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40879;
-  fra.me.meth = LOCATE_parser___ReduceAction1065___init;
+  fra.me.line = 8757;
+  fra.me.meth = LOCATE_parser___ReduceAction261___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40879 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8757 */
+  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[itpos1069] = 1;
+  init_table[itpos255] = 1;
   return;
 }
-void parser___ReduceAction1066___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction262___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 = 40883;
-  fra.me.meth = LOCATE_parser___ReduceAction1066___action;
+  fra.me.line = 8761;
+  fra.me.meth = LOCATE_parser___ReduceAction262___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8763 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8764 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8765 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8766 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8767 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8768 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8770 */
+  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, 8770);
+  }
+  /* ./parser//parser.nit:8772 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8772);
+  }
+  /* ./parser//parser.nit:8773 */
+  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:8775 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8775);
+  }
+  /* ./parser//parser.nit:8777 */
   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:40891 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40891);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8777);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40893 */
+  /* ./parser//parser.nit:8778 */
+  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:8784 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8785 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction262____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40893);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8785);
   }
-  fra.me.REG[2] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction262____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40899 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1066___init(val_t p0, int* init_table){
-  int itpos1070 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1066].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
+  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction262].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1070]) return;
+  if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40901;
-  fra.me.meth = LOCATE_parser___ReduceAction1066___init;
+  fra.me.line = 8788;
+  fra.me.meth = LOCATE_parser___ReduceAction262___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40901 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8788 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1070] = 1;
+  init_table[itpos256] = 1;
   return;
 }
-void parser___ReduceAction1067___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction263___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 = 40905;
-  fra.me.meth = LOCATE_parser___ReduceAction1067___action;
+  fra.me.line = 8792;
+  fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8794 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8795 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8796 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8797 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8798 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8799 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8800 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8802 */
+  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, 8802);
+  }
+  /* ./parser//parser.nit:8804 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8804);
+  }
+  /* ./parser//parser.nit:8806 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8806);
+  }
+  /* ./parser//parser.nit:8808 */
   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:40913 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40913);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8808);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40915 */
+  /* ./parser//parser.nit:8809 */
+  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:8815 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8816 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction263____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40915);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8816);
   }
-  fra.me.REG[2] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction263____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40921 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1067___init(val_t p0, int* init_table){
-  int itpos1071 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1067].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
+  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction263].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1071]) return;
+  if (init_table[itpos257]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40923;
-  fra.me.meth = LOCATE_parser___ReduceAction1067___init;
+  fra.me.line = 8819;
+  fra.me.meth = LOCATE_parser___ReduceAction263___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40923 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8819 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1071] = 1;
+  init_table[itpos257] = 1;
   return;
 }
-void parser___ReduceAction1068___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction264___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 = 40927;
-  fra.me.meth = LOCATE_parser___ReduceAction1068___action;
+  fra.me.line = 8823;
+  fra.me.meth = LOCATE_parser___ReduceAction264___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8825 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8826 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8827 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8828 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8829 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8832 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8832);
+  }
+  /* ./parser//parser.nit:8834 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8834);
+  }
+  /* ./parser//parser.nit:8836 */
   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:40935 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40935);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8836);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40937 */
+  /* ./parser//parser.nit:8837 */
+  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:8843 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8844 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction264____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40937);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8844);
   }
-  fra.me.REG[2] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction264____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40943 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1068___init(val_t p0, int* init_table){
-  int itpos1072 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1068].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
+  int itpos258 = 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[itpos1072]) return;
+  if (init_table[itpos258]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40945;
-  fra.me.meth = LOCATE_parser___ReduceAction1068___init;
+  fra.me.line = 8847;
+  fra.me.meth = LOCATE_parser___ReduceAction264___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40945 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8847 */
+  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[itpos1072] = 1;
+  init_table[itpos258] = 1;
   return;
 }
-void parser___ReduceAction1069___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction265___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 = 40949;
-  fra.me.meth = LOCATE_parser___ReduceAction1069___action;
+  fra.me.line = 8851;
+  fra.me.meth = LOCATE_parser___ReduceAction265___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8853 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8854 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8855 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8856 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8857 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8858 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8859 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8860 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8861 */
+  fra.me.REG[8] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8863 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8863);
+  }
+  /* ./parser//parser.nit:8865 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8865);
+  }
+  /* ./parser//parser.nit:8867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8867);
+  }
+  /* ./parser//parser.nit:8868 */
+  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:8870 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8870);
+  }
+  /* ./parser//parser.nit:8872 */
   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:40957 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40957);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8872);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40959 */
+  /* ./parser//parser.nit:8873 */
+  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:8880 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8881 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction265____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40959);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8881);
   }
-  fra.me.REG[2] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction265____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40965 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1069___init(val_t p0, int* init_table){
-  int itpos1073 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1069].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
+  int itpos259 = 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[itpos1073]) return;
+  if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40967;
-  fra.me.meth = LOCATE_parser___ReduceAction1069___init;
+  fra.me.line = 8884;
+  fra.me.meth = LOCATE_parser___ReduceAction265___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40967 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8884 */
+  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[itpos1073] = 1;
+  init_table[itpos259] = 1;
   return;
 }
-void parser___ReduceAction1070___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction266___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 = 40971;
-  fra.me.meth = LOCATE_parser___ReduceAction1070___action;
+  fra.me.line = 8888;
+  fra.me.meth = LOCATE_parser___ReduceAction266___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8890 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8891 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8892 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8893 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8894 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8895 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8896 */
+  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:8899 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8899);
+  }
+  /* ./parser//parser.nit:8901 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8901);
+  }
+  /* ./parser//parser.nit:8902 */
+  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:8904 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8904);
+  }
+  /* ./parser//parser.nit:8906 */
   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:40979 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40979);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8906);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:40981 */
+  /* ./parser//parser.nit:8907 */
+  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:8914 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8915 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction266____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 40981);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8915);
   }
-  fra.me.REG[2] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction266____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:40987 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1070___init(val_t p0, int* init_table){
-  int itpos1074 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1070].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
+  int itpos260 = 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[itpos1074]) return;
+  if (init_table[itpos260]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 40989;
-  fra.me.meth = LOCATE_parser___ReduceAction1070___init;
+  fra.me.line = 8918;
+  fra.me.meth = LOCATE_parser___ReduceAction266___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:40989 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8918 */
+  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[itpos1074] = 1;
+  init_table[itpos260] = 1;
   return;
 }
-void parser___ReduceAction1071___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction267___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 = 40993;
-  fra.me.meth = LOCATE_parser___ReduceAction1071___action;
+  fra.me.line = 8922;
+  fra.me.meth = LOCATE_parser___ReduceAction267___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8924 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8925 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8926 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8927 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8928 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8929 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:8931 */
+  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, 8931);
+  }
+  /* ./parser//parser.nit:8933 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8933);
+  }
+  /* ./parser//parser.nit:8934 */
+  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:8936 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8936);
+  }
+  /* ./parser//parser.nit:8938 */
   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:41001 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41001);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8938);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:41003 */
+  /* ./parser//parser.nit:8939 */
+  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:8945 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8946 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction267____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41003);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8946);
   }
-  fra.me.REG[2] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(108);
+  REGB0 = ATTR_parser___ReduceAction267____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41009 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1071___init(val_t p0, int* init_table){
-  int itpos1075 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1071].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
+  int itpos261 = 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[itpos1075]) return;
+  if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41011;
-  fra.me.meth = LOCATE_parser___ReduceAction1071___init;
+  fra.me.line = 8949;
+  fra.me.meth = LOCATE_parser___ReduceAction267___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41011 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8949 */
+  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[itpos1075] = 1;
+  init_table[itpos261] = 1;
   return;
 }
-void parser___ReduceAction1072___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction268___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 = 41015;
-  fra.me.meth = LOCATE_parser___ReduceAction1072___action;
+  fra.me.line = 8953;
+  fra.me.meth = LOCATE_parser___ReduceAction268___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41020 */
+  /* ./parser//parser.nit:8955 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8956 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8958 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPluseq, ID_TPluseq)) /*cast nullable TPluseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41020);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8958);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(109);
+  /* ./parser//parser.nit:8959 */
+  fra.me.REG[3] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
+  /* ./parser//parser.nit:8962 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8963 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction268____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8963);
+  }
+  REGB0 = ATTR_parser___ReduceAction268____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41022 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1072___init(val_t p0, int* init_table){
-  int itpos1076 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1072].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
+  int itpos262 = 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[itpos1076]) return;
+  if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41024;
-  fra.me.meth = LOCATE_parser___ReduceAction1072___init;
+  fra.me.line = 8966;
+  fra.me.meth = LOCATE_parser___ReduceAction268___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41024 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8966 */
+  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[itpos1076] = 1;
+  init_table[itpos262] = 1;
   return;
 }
-void parser___ReduceAction1073___action(val_t p0, val_t p1){
+void parser___ReduceAction269___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 = 41028;
-  fra.me.meth = LOCATE_parser___ReduceAction1073___action;
+  fra.me.line = 8970;
+  fra.me.meth = LOCATE_parser___ReduceAction269___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -109542,952 +30027,1378 @@ void parser___ReduceAction1073___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8972 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8973 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:41036 */
+  /* ./parser//parser.nit:8975 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinuseq, ID_TMinuseq)) /*cast nullable TMinuseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41036);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8975);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41038 */
+  /* ./parser//parser.nit:8976 */
+  fra.me.REG[3] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
+  /* ./parser//parser.nit:8979 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:8980 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction269____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41038);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8980);
   }
-  fra.me.REG[2] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(109);
+  REGB0 = ATTR_parser___ReduceAction269____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41044 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1073___init(val_t p0, int* init_table){
-  int itpos1077 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1073].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
+  int itpos263 = 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[itpos1077]) return;
+  if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41046;
-  fra.me.meth = LOCATE_parser___ReduceAction1073___init;
+  fra.me.line = 8983;
+  fra.me.meth = LOCATE_parser___ReduceAction269___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41046 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:8983 */
+  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[itpos1077] = 1;
+  init_table[itpos263] = 1;
   return;
 }
-void parser___ReduceAction1074___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction270___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 = 41050;
-  fra.me.meth = LOCATE_parser___ReduceAction1074___action;
+  fra.me.line = 8987;
+  fra.me.meth = LOCATE_parser___ReduceAction270___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8989 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:8990 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:41058 */
+  /* ./parser//parser.nit:8991 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8992 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:8994 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8994);
+  }
+  /* ./parser//parser.nit:8996 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41058);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8996);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41060 */
+  /* ./parser//parser.nit:8998 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41060);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8998);
   }
-  fra.me.REG[2] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(109);
+  /* ./parser//parser.nit:8999 */
+  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:9004 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9005 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction270____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9005);
+  }
+  REGB0 = ATTR_parser___ReduceAction270____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41066 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1074___init(val_t p0, int* init_table){
-  int itpos1078 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1074].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
+  int itpos264 = 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[itpos1078]) return;
+  if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41068;
-  fra.me.meth = LOCATE_parser___ReduceAction1074___init;
+  fra.me.line = 9008;
+  fra.me.meth = LOCATE_parser___ReduceAction270___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41068 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9008 */
+  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[itpos1078] = 1;
+  init_table[itpos264] = 1;
   return;
 }
-void parser___ReduceAction1075___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction271___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 = 41072;
-  fra.me.meth = LOCATE_parser___ReduceAction1075___action;
+  fra.me.line = 9012;
+  fra.me.meth = LOCATE_parser___ReduceAction271___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41077 */
+  /* ./parser//parser.nit:9014 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9015 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9016 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9018 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41077);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9018);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(110);
+  /* ./parser//parser.nit:9020 */
+  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, 9020);
+  }
+  /* ./parser//parser.nit:9021 */
+  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9026 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9027 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction271____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9027);
+  }
+  REGB0 = ATTR_parser___ReduceAction271____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41079 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1075___init(val_t p0, int* init_table){
-  int itpos1079 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1075].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
+  int itpos265 = 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[itpos1079]) return;
+  if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41081;
-  fra.me.meth = LOCATE_parser___ReduceAction1075___init;
+  fra.me.line = 9030;
+  fra.me.meth = LOCATE_parser___ReduceAction271___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41081 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9030 */
+  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[itpos1079] = 1;
+  init_table[itpos265] = 1;
   return;
 }
-void parser___ReduceAction1076___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction272___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 = 41085;
-  fra.me.meth = LOCATE_parser___ReduceAction1076___action;
+  fra.me.line = 9034;
+  fra.me.meth = LOCATE_parser___ReduceAction272___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9036 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9037 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9038 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9039 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9040 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9041 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9042 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9043 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9044 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9046 */
+  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, 9046);
+  }
+  /* ./parser//parser.nit:9048 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9048);
+  }
+  /* ./parser//parser.nit:9050 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9050);
+  }
+  /* ./parser//parser.nit:9052 */
   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:41093 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41093);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9052);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41095 */
+  /* ./parser//parser.nit:9053 */
+  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:9059 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9060 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction272____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41095);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9060);
   }
-  fra.me.REG[2] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(110);
+  REGB0 = ATTR_parser___ReduceAction272____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41101 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1076___init(val_t p0, int* init_table){
-  int itpos1080 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1076].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
+  int itpos266 = 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[itpos1080]) return;
+  if (init_table[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41103;
-  fra.me.meth = LOCATE_parser___ReduceAction1076___init;
+  fra.me.line = 9063;
+  fra.me.meth = LOCATE_parser___ReduceAction272___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41103 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9063 */
+  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[itpos1080] = 1;
+  init_table[itpos266] = 1;
   return;
 }
-void parser___ReduceAction1077___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction273___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 = 41107;
-  fra.me.meth = LOCATE_parser___ReduceAction1077___action;
+  fra.me.line = 9067;
+  fra.me.meth = LOCATE_parser___ReduceAction273___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9069 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9070 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9071 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9072 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9073 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9074 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9075 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9077 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9077);
+  }
+  /* ./parser//parser.nit:9079 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9079);
+  }
+  /* ./parser//parser.nit:9081 */
   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:41115 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41115);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9081);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41117 */
+  /* ./parser//parser.nit:9082 */
+  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:9088 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9089 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction273____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41117);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9089);
   }
-  fra.me.REG[2] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(110);
+  REGB0 = ATTR_parser___ReduceAction273____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41123 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1077___init(val_t p0, int* init_table){
-  int itpos1081 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1077].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
+  int itpos267 = 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[itpos1081]) return;
+  if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41125;
-  fra.me.meth = LOCATE_parser___ReduceAction1077___init;
+  fra.me.line = 9092;
+  fra.me.meth = LOCATE_parser___ReduceAction273___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41125 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9092 */
+  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[itpos1081] = 1;
+  init_table[itpos267] = 1;
   return;
 }
-void parser___ReduceAction1078___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction274___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 = 41129;
-  fra.me.meth = LOCATE_parser___ReduceAction1078___action;
+  fra.me.line = 9096;
+  fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9098 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9099 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9100 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9101 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9102 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9103 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9104 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9105 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9106 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9108 */
+  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, 9108);
+  }
+  /* ./parser//parser.nit:9110 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9110);
+  }
+  /* ./parser//parser.nit:9112 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9112);
+  }
+  /* ./parser//parser.nit:9114 */
   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:41137 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41137);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9114);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41139 */
+  /* ./parser//parser.nit:9115 */
+  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:9121 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9122 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction274____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41139);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9122);
   }
-  fra.me.REG[2] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(110);
+  REGB0 = ATTR_parser___ReduceAction274____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41145 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1078___init(val_t p0, int* init_table){
-  int itpos1082 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1078].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
+  int itpos268 = 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[itpos1082]) return;
+  if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41147;
-  fra.me.meth = LOCATE_parser___ReduceAction1078___init;
+  fra.me.line = 9125;
+  fra.me.meth = LOCATE_parser___ReduceAction274___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41147 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9125 */
+  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[itpos1082] = 1;
+  init_table[itpos268] = 1;
   return;
 }
-void parser___ReduceAction1079___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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 = 41151;
-  fra.me.meth = LOCATE_parser___ReduceAction1079___action;
+  fra.me.line = 9129;
+  fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41156 */
+  /* ./parser//parser.nit:9131 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9132 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9133 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9134 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9135 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9136 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9137 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9139 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9139);
+  }
+  /* ./parser//parser.nit:9141 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9141);
+  }
+  /* ./parser//parser.nit:9143 */
+  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, 9143);
+  }
+  /* ./parser//parser.nit:9144 */
+  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:9150 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9151 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction275____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41156);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9151);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(111);
+  REGB0 = ATTR_parser___ReduceAction275____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41158 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1079___init(val_t p0, int* init_table){
-  int itpos1083 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1079].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
+  int itpos269 = 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[itpos1083]) return;
+  if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41160;
-  fra.me.meth = LOCATE_parser___ReduceAction1079___init;
+  fra.me.line = 9154;
+  fra.me.meth = LOCATE_parser___ReduceAction275___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41160 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9154 */
+  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[itpos1083] = 1;
+  init_table[itpos269] = 1;
   return;
 }
-void parser___ReduceAction1080___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} 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 = 41164;
-  fra.me.meth = LOCATE_parser___ReduceAction1080___action;
+  fra.me.line = 9158;
+  fra.me.meth = LOCATE_parser___ReduceAction276___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9160 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9161 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:41171 */
+  /* ./parser//parser.nit:9162 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9163 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9164 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9165 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9166 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9167 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9169 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9169);
+  }
+  /* ./parser//parser.nit:9171 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41171);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9171);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41173 */
+  /* ./parser//parser.nit:9173 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41173);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9173);
   }
-  fra.me.REG[2] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(111);
+  /* ./parser//parser.nit:9174 */
+  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:9180 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9181 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction276____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9181);
+  }
+  REGB0 = ATTR_parser___ReduceAction276____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41179 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1080___init(val_t p0, int* init_table){
-  int itpos1084 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1080].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
+  int itpos270 = 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[itpos1084]) return;
+  if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41181;
-  fra.me.meth = LOCATE_parser___ReduceAction1080___init;
+  fra.me.line = 9184;
+  fra.me.meth = LOCATE_parser___ReduceAction276___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41181 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9184 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1084] = 1;
+  init_table[itpos270] = 1;
   return;
 }
-void parser___ReduceAction1081___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction279___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 = 41185;
-  fra.me.meth = LOCATE_parser___ReduceAction1081___action;
+  fra.me.line = 9188;
+  fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9190 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9191 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
-  /* ./parser//parser.nit:41192 */
+  /* ./parser//parser.nit:9192 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9193 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9195 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41192);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9195);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41194 */
+  /* ./parser//parser.nit:9197 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41194);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9197);
   }
-  fra.me.REG[2] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(111);
+  /* ./parser//parser.nit:9199 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9199);
+  }
+  /* ./parser//parser.nit:9200 */
+  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:9205 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9206 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction279____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9206);
+  }
+  REGB0 = ATTR_parser___ReduceAction279____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41200 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1081___init(val_t p0, int* init_table){
-  int itpos1085 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1081].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
+  int itpos271 = 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[itpos1085]) return;
+  if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41202;
-  fra.me.meth = LOCATE_parser___ReduceAction1081___init;
+  fra.me.line = 9209;
+  fra.me.meth = LOCATE_parser___ReduceAction279___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41202 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9209 */
+  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[itpos1085] = 1;
+  init_table[itpos271] = 1;
   return;
 }
-void parser___ReduceAction1082___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41206;
-  fra.me.meth = LOCATE_parser___ReduceAction1082___action;
+  fra.me.line = 9213;
+  fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41211 */
+  /* ./parser//parser.nit:9215 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9216 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9217 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9219 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41211);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9219);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(112);
+  /* ./parser//parser.nit:9221 */
+  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, 9221);
+  }
+  /* ./parser//parser.nit:9222 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:9227 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9228 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction280____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9228);
+  }
+  REGB0 = ATTR_parser___ReduceAction280____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41213 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1082___init(val_t p0, int* init_table){
-  int itpos1086 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1082].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
+  int itpos272 = 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[itpos1086]) return;
+  if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41215;
-  fra.me.meth = LOCATE_parser___ReduceAction1082___init;
+  fra.me.line = 9231;
+  fra.me.meth = LOCATE_parser___ReduceAction280___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41215 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9231 */
+  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[itpos1086] = 1;
+  init_table[itpos272] = 1;
   return;
 }
-void parser___ReduceAction1083___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction281___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 = 41219;
-  fra.me.meth = LOCATE_parser___ReduceAction1083___action;
+  fra.me.line = 9235;
+  fra.me.meth = LOCATE_parser___ReduceAction281___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9237 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9238 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9239 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  /* ./parser//parser.nit:41228 */
+  /* ./parser//parser.nit:9240 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9241 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9242 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9243 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9244 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9246 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41228);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9246);
   }
-  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:41230 */
+  /* ./parser//parser.nit:9248 */
+  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, 9248);
+  }
+  /* ./parser//parser.nit:9250 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41230);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9250);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41232 */
+  /* ./parser//parser.nit:9252 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41232);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9252);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:41234 */
+  /* ./parser//parser.nit:9254 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:41235 */
   } else {
-    /* ./parser//parser.nit:41237 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9254);
   }
-  fra.me.REG[5] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(112);
+  /* ./parser//parser.nit:9255 */
+  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:9262 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9263 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction281____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9263);
+  }
+  REGB0 = ATTR_parser___ReduceAction281____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41247 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1083___init(val_t p0, int* init_table){
-  int itpos1087 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1083].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
+  int itpos273 = 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[itpos1087]) return;
+  if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41249;
-  fra.me.meth = LOCATE_parser___ReduceAction1083___init;
+  fra.me.line = 9266;
+  fra.me.meth = LOCATE_parser___ReduceAction281___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41249 */
+  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___ReduceAction281____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1087] = 1;
+  init_table[itpos273] = 1;
   return;
 }
-void parser___ReduceAction1084___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction282___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 = 41253;
-  fra.me.meth = LOCATE_parser___ReduceAction1084___action;
+  fra.me.line = 9270;
+  fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9272 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9273 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9274 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:41262 */
+  /* ./parser//parser.nit:9275 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9276 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9277 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9278 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9280 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9280);
+  }
+  /* ./parser//parser.nit:9282 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9282);
+  }
+  /* ./parser//parser.nit:9284 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41262);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9284);
   }
+  /* ./parser//parser.nit:9286 */
   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:41264 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41264);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9286);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:41266 */
+  /* ./parser//parser.nit:9287 */
+  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:9294 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9295 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction282____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41266);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9295);
   }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(112);
+  REGB0 = ATTR_parser___ReduceAction282____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41273 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1084___init(val_t p0, int* init_table){
-  int itpos1088 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1084].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
+  int itpos274 = 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[itpos1088]) return;
+  if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41275;
-  fra.me.meth = LOCATE_parser___ReduceAction1084___init;
+  fra.me.line = 9298;
+  fra.me.meth = LOCATE_parser___ReduceAction282___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41275 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9298 */
+  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[itpos1088] = 1;
+  init_table[itpos274] = 1;
   return;
 }
-void parser___ReduceAction1085___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction283___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 = 41279;
-  fra.me.meth = LOCATE_parser___ReduceAction1085___action;
+  fra.me.line = 9302;
+  fra.me.meth = LOCATE_parser___ReduceAction283___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9304 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9305 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
-  /* ./parser//parser.nit:41285 */
+  /* ./parser//parser.nit:9306 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9307 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9308 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9309 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9310 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9311 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9312 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9313 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9314 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9315 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9317 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41285);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9317);
   }
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:41289 */
+  /* ./parser//parser.nit:9319 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41289);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9319);
   }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[3], fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(112);
+  /* ./parser//parser.nit:9321 */
+  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, 9321);
+  }
+  /* ./parser//parser.nit:9323 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9323);
+  }
+  /* ./parser//parser.nit:9325 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9325);
+  }
+  /* ./parser//parser.nit:9327 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9327);
+  }
+  /* ./parser//parser.nit:9328 */
+  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:9336 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9337 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction283____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9337);
+  }
+  REGB0 = ATTR_parser___ReduceAction283____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41296 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1085___init(val_t p0, int* init_table){
-  int itpos1089 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1085].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
+  int itpos275 = 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[itpos1089]) return;
+  if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41298;
-  fra.me.meth = LOCATE_parser___ReduceAction1085___init;
+  fra.me.line = 9340;
+  fra.me.meth = LOCATE_parser___ReduceAction283___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41298 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9340 */
+  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[itpos1089] = 1;
+  init_table[itpos275] = 1;
   return;
 }
-void parser___ReduceAction1086___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction284___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 = 41302;
-  fra.me.meth = LOCATE_parser___ReduceAction1086___action;
+  fra.me.line = 9344;
+  fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9346 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9347 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9348 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9349 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9350 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9351 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9352 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9353 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9354 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9355 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9356 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9358 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9358);
+  }
+  /* ./parser//parser.nit:9360 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9360);
+  }
+  /* ./parser//parser.nit:9362 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9362);
+  }
+  /* ./parser//parser.nit:9364 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9364);
+  }
+  /* ./parser//parser.nit:9366 */
   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:41310 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41310);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9366);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:41312 */
+  /* ./parser//parser.nit:9367 */
+  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:9375 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9376 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction284____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41312);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9376);
   }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction284____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41318 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1086___init(val_t p0, int* init_table){
-  int itpos1090 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1086].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
+  int itpos276 = 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[itpos1090]) return;
+  if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41320;
-  fra.me.meth = LOCATE_parser___ReduceAction1086___init;
+  fra.me.line = 9379;
+  fra.me.meth = LOCATE_parser___ReduceAction284___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41320 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9379 */
+  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[itpos1090] = 1;
+  init_table[itpos276] = 1;
   return;
 }
-void parser___ReduceAction1087___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction285___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 = 41324;
-  fra.me.meth = LOCATE_parser___ReduceAction1087___action;
+  fra.me.line = 9383;
+  fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:41331 */
+  /* ./parser//parser.nit:9385 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9386 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9387 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9388 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9389 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9391 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41331);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9391);
   }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9393 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9393);
+  }
+  /* ./parser//parser.nit:9395 */
+  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, 9395);
+  }
+  /* ./parser//parser.nit:9396 */
+  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:9402 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9403 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction285____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9403);
+  }
+  REGB0 = ATTR_parser___ReduceAction285____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41337 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1087___init(val_t p0, int* init_table){
-  int itpos1091 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1087].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
+  int itpos277 = 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[itpos1091]) return;
+  if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41339;
-  fra.me.meth = LOCATE_parser___ReduceAction1087___init;
+  fra.me.line = 9406;
+  fra.me.meth = LOCATE_parser___ReduceAction285___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41339 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9406 */
+  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[itpos1091] = 1;
+  init_table[itpos277] = 1;
   return;
 }
-void parser___ReduceAction1088___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[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 = 41343;
-  fra.me.meth = LOCATE_parser___ReduceAction1088___action;
+  fra.me.line = 9410;
+  fra.me.meth = LOCATE_parser___ReduceAction286___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -110499,1054 +31410,1395 @@ void parser___ReduceAction1088___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9412 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9413 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9414 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9415 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:41354 */
+  /* ./parser//parser.nit:9416 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9417 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9419 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41354);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9419);
   }
-  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:41356 */
+  /* ./parser//parser.nit:9421 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41356);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9421);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41358 */
+  /* ./parser//parser.nit:9423 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41358);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9423);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:41360 */
+  /* ./parser//parser.nit:9425 */
+  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)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:41361 */
   } else {
-    /* ./parser//parser.nit:41363 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9425);
   }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9426 */
+  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:9432 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9433 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction286____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9433);
+  }
+  REGB0 = ATTR_parser___ReduceAction286____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41373 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1088___init(val_t p0, int* init_table){
-  int itpos1092 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1088].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
+  int itpos278 = 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[itpos1092]) return;
+  if (init_table[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41375;
-  fra.me.meth = LOCATE_parser___ReduceAction1088___init;
+  fra.me.line = 9436;
+  fra.me.meth = LOCATE_parser___ReduceAction286___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41375 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9436 */
+  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[itpos1092] = 1;
+  init_table[itpos278] = 1;
   return;
 }
-void parser___ReduceAction1089___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction287___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 = 41379;
-  fra.me.meth = LOCATE_parser___ReduceAction1089___action;
+  fra.me.line = 9440;
+  fra.me.meth = LOCATE_parser___ReduceAction287___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9442 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9443 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:41389 */
+  /* ./parser//parser.nit:9444 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9446 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41389);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9446);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41391 */
+  /* ./parser//parser.nit:9448 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41391);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9448);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:41393 */
+  /* ./parser//parser.nit:9449 */
+  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:9455 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9456 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction287____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:41394 */
   } else {
-    /* ./parser//parser.nit:41396 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9456);
   }
-  fra.me.REG[5] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction287____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41406 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1089___init(val_t p0, int* init_table){
-  int itpos1093 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1089].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
+  int itpos279 = 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[itpos1093]) return;
+  if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41408;
-  fra.me.meth = LOCATE_parser___ReduceAction1089___init;
+  fra.me.line = 9459;
+  fra.me.meth = LOCATE_parser___ReduceAction287___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41408 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9459 */
+  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[itpos1093] = 1;
+  init_table[itpos279] = 1;
   return;
 }
-void parser___ReduceAction1090___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction288___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 = 41412;
-  fra.me.meth = LOCATE_parser___ReduceAction1090___action;
+  fra.me.line = 9463;
+  fra.me.meth = LOCATE_parser___ReduceAction288___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9465 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9466 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:41419 */
+  /* ./parser//parser.nit:9467 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9468 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9470 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9470);
+  }
+  /* ./parser//parser.nit:9472 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41419);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9472);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41421 */
+  /* ./parser//parser.nit:9474 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41421);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9474);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:41423 */
+  /* ./parser//parser.nit:9475 */
+  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:9481 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9482 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction288____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:41424 */
   } else {
-    /* ./parser//parser.nit:41426 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9482);
   }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction288____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41435 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1090___init(val_t p0, int* init_table){
-  int itpos1094 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1090].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
+  int itpos280 = 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[itpos1094]) return;
+  if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41437;
-  fra.me.meth = LOCATE_parser___ReduceAction1090___init;
+  fra.me.line = 9485;
+  fra.me.meth = LOCATE_parser___ReduceAction288___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ./parser//parser.nit:9485 */
+  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;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos280] = 1;
+  return;
+}
+void parser___ReduceAction289___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 = 9489;
+  fra.me.meth = LOCATE_parser___ReduceAction289___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:9491 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9492 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9493 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9495 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9496 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction289____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9496);
+  }
+  REGB0 = ATTR_parser___ReduceAction289____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___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 itpos281 = 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[itpos281]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 9499;
+  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;
-  /* ./parser//parser.nit:41437 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9499 */
+  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[itpos1094] = 1;
+  init_table[itpos281] = 1;
   return;
 }
-void parser___ReduceAction1091___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction293___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 = 41441;
-  fra.me.meth = LOCATE_parser___ReduceAction1091___action;
+  fra.me.line = 9503;
+  fra.me.meth = LOCATE_parser___ReduceAction293___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9505 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9506 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9507 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:41449 */
+  /* ./parser//parser.nit:9508 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9509 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9510 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:9512 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41449);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9512);
   }
-  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:41451 */
+  /* ./parser//parser.nit:9514 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41451);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9514);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41453 */
+  /* ./parser//parser.nit:9515 */
+  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:9517 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41453);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9517);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:41455 */
+  /* ./parser//parser.nit:9518 */
+  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:9519 */
+  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:9524 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:9525 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction293____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:41456 */
   } else {
-    /* ./parser//parser.nit:41458 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9525);
   }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction293____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41467 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1091___init(val_t p0, int* init_table){
-  int itpos1095 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1091].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction293___init(val_t p0, val_t p1, int* init_table){
+  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction293].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1095]) return;
+  if (init_table[itpos282]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41469;
-  fra.me.meth = LOCATE_parser___ReduceAction1091___init;
+  fra.me.line = 9528;
+  fra.me.meth = LOCATE_parser___ReduceAction293___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41469 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9528 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction293____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1095] = 1;
+  init_table[itpos282] = 1;
   return;
 }
-void parser___ReduceAction1092___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction295___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 = 41473;
-  fra.me.meth = LOCATE_parser___ReduceAction1092___action;
+  fra.me.line = 9532;
+  fra.me.meth = LOCATE_parser___ReduceAction295___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9534 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9535 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9536 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9537 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:41483 */
+  /* ./parser//parser.nit:9538 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9539 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9540 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9541 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9542 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9543 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9544 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9545 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9547 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41483);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9547);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:41485 */
+  /* ./parser//parser.nit:9549 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41485);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9549);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41487 */
+  /* ./parser//parser.nit:9551 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41487);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9551);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:41489 */
+  /* ./parser//parser.nit:9553 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:41490 */
   } else {
-    /* ./parser//parser.nit:41492 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9553);
   }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9555 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9555);
+  }
+  /* ./parser//parser.nit:9557 */
+  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, 9557);
+  }
+  /* ./parser//parser.nit:9558 */
+  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:9566 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9567 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction295____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9567);
+  }
+  REGB0 = ATTR_parser___ReduceAction295____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41501 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1092___init(val_t p0, int* init_table){
-  int itpos1096 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1092].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction295___init(val_t p0, val_t p1, int* init_table){
+  int itpos283 = 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[itpos1096]) return;
+  if (init_table[itpos283]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41503;
-  fra.me.meth = LOCATE_parser___ReduceAction1092___init;
+  fra.me.line = 9570;
+  fra.me.meth = LOCATE_parser___ReduceAction295___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41503 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9570 */
+  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[itpos1096] = 1;
+  init_table[itpos283] = 1;
   return;
 }
-void parser___ReduceAction1093___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction297___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 = 41507;
-  fra.me.meth = LOCATE_parser___ReduceAction1093___action;
+  fra.me.line = 9574;
+  fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9576 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9577 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:41516 */
+  /* ./parser//parser.nit:9578 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9579 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9580 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9582 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41516);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9582);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41518 */
+  /* ./parser//parser.nit:9584 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41518);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9584);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:41520 */
+  /* ./parser//parser.nit:9585 */
+  fra.me.REG[3] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9589 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9590 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction297____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:41521 */
   } else {
-    /* ./parser//parser.nit:41523 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9590);
   }
-  fra.me.REG[4] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction297____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41532 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1093___init(val_t p0, int* init_table){
-  int itpos1097 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1093].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
+  int itpos284 = 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[itpos1097]) return;
+  if (init_table[itpos284]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41534;
-  fra.me.meth = LOCATE_parser___ReduceAction1093___init;
+  fra.me.line = 9593;
+  fra.me.meth = LOCATE_parser___ReduceAction297___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41534 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9593 */
+  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[itpos1097] = 1;
+  init_table[itpos284] = 1;
   return;
 }
-void parser___ReduceAction1094___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction298___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 = 41538;
-  fra.me.meth = LOCATE_parser___ReduceAction1094___action;
+  fra.me.line = 9597;
+  fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9599 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9600 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9601 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9602 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9603 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:41550 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41550);
-    nit_exit(1);
-  }
-  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:41552 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41552);
-    nit_exit(1);
-  }
-  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:41554 */
+  /* ./parser//parser.nit:9605 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41554);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9605);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41556 */
+  /* ./parser//parser.nit:9607 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41556);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9607);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:41558 */
+  /* ./parser//parser.nit:9608 */
+  fra.me.REG[3] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9612 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9613 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction298____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:41559 */
   } else {
-    /* ./parser//parser.nit:41561 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9613);
   }
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction298____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41571 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1094___init(val_t p0, int* init_table){
-  int itpos1098 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1094].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
+  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction298].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1098]) return;
+  if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41573;
-  fra.me.meth = LOCATE_parser___ReduceAction1094___init;
+  fra.me.line = 9616;
+  fra.me.meth = LOCATE_parser___ReduceAction298___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41573 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9616 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1098] = 1;
+  init_table[itpos285] = 1;
   return;
 }
-void parser___ReduceAction1095___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction299___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 = 41577;
-  fra.me.meth = LOCATE_parser___ReduceAction1095___action;
+  fra.me.line = 9620;
+  fra.me.meth = LOCATE_parser___ReduceAction299___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
-  /* ./parser//parser.nit:41582 */
+  /* ./parser//parser.nit:9622 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9623 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9624 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9625 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9626 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9627 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9629 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41582);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9629);
   }
-  fra.me.REG[2] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9631 */
+  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, 9631);
+  }
+  /* ./parser//parser.nit:9632 */
+  fra.me.REG[3] = NEW_AOrElseExpr_parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9636 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9637 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction299____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9637);
+  }
+  REGB0 = ATTR_parser___ReduceAction299____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41587 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1095___init(val_t p0, int* init_table){
-  int itpos1099 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1095].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
+  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction299].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1099]) return;
+  if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41589;
-  fra.me.meth = LOCATE_parser___ReduceAction1095___init;
+  fra.me.line = 9640;
+  fra.me.meth = LOCATE_parser___ReduceAction299___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41589 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9640 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1099] = 1;
+  init_table[itpos286] = 1;
   return;
 }
-void parser___ReduceAction1096___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction301___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 = 41593;
-  fra.me.meth = LOCATE_parser___ReduceAction1096___action;
+  fra.me.line = 9644;
+  fra.me.meth = LOCATE_parser___ReduceAction301___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
-  /* ./parser//parser.nit:41598 */
+  /* ./parser//parser.nit:9646 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9647 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9648 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9649 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9651 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41598);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9651);
   }
-  fra.me.REG[2] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9653 */
+  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, 9653);
+  }
+  /* ./parser//parser.nit:9654 */
+  fra.me.REG[3] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9658 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9659 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction301____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9659);
+  }
+  REGB0 = ATTR_parser___ReduceAction301____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41603 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1096___init(val_t p0, int* init_table){
-  int itpos1100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1096].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
+  int itpos287 = 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[itpos1100]) return;
+  if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41605;
-  fra.me.meth = LOCATE_parser___ReduceAction1096___init;
+  fra.me.line = 9662;
+  fra.me.meth = LOCATE_parser___ReduceAction301___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41605 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9662 */
+  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[itpos1100] = 1;
+  init_table[itpos287] = 1;
   return;
 }
-void parser___ReduceAction1097___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction303___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 = 41609;
-  fra.me.meth = LOCATE_parser___ReduceAction1097___action;
+  fra.me.line = 9666;
+  fra.me.meth = LOCATE_parser___ReduceAction303___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
-  /* ./parser//parser.nit:41614 */
+  /* ./parser//parser.nit:9668 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9669 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9670 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9671 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9672 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9674 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41614);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9674);
   }
-  fra.me.REG[2] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9676 */
+  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, 9676);
+  }
+  /* ./parser//parser.nit:9677 */
+  fra.me.REG[3] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9681 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9682 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction303____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9682);
+  }
+  REGB0 = ATTR_parser___ReduceAction303____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41619 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1097___init(val_t p0, int* init_table){
-  int itpos1101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1097].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
+  int itpos288 = 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[itpos1101]) return;
+  if (init_table[itpos288]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41621;
-  fra.me.meth = LOCATE_parser___ReduceAction1097___init;
+  fra.me.line = 9685;
+  fra.me.meth = LOCATE_parser___ReduceAction303___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41621 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9685 */
+  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[itpos1101] = 1;
+  init_table[itpos288] = 1;
   return;
 }
-void parser___ReduceAction1098___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction304___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 = 41625;
-  fra.me.meth = LOCATE_parser___ReduceAction1098___action;
+  fra.me.line = 9689;
+  fra.me.meth = LOCATE_parser___ReduceAction304___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:41630 */
+  /* ./parser//parser.nit:9691 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9692 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9693 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9694 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9695 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9697 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41630);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9697);
   }
-  fra.me.REG[2] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9699 */
+  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, 9699);
+  }
+  /* ./parser//parser.nit:9700 */
+  fra.me.REG[3] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9704 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9705 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction304____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9705);
+  }
+  REGB0 = ATTR_parser___ReduceAction304____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41635 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1098___init(val_t p0, int* init_table){
-  int itpos1102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1098].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
+  int itpos289 = 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[itpos1102]) return;
+  if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41637;
-  fra.me.meth = LOCATE_parser___ReduceAction1098___init;
+  fra.me.line = 9708;
+  fra.me.meth = LOCATE_parser___ReduceAction304___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41637 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9708 */
+  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[itpos1102] = 1;
+  init_table[itpos289] = 1;
   return;
 }
-void parser___ReduceAction1099___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction305___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 = 41641;
-  fra.me.meth = LOCATE_parser___ReduceAction1099___action;
+  fra.me.line = 9712;
+  fra.me.meth = LOCATE_parser___ReduceAction305___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
-  /* ./parser//parser.nit:41646 */
+  /* ./parser//parser.nit:9714 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9715 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9716 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9717 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9718 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9720 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41646);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9720);
   }
-  fra.me.REG[2] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9722 */
+  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, 9722);
+  }
+  /* ./parser//parser.nit:9723 */
+  fra.me.REG[3] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9727 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9728 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction305____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9728);
+  }
+  REGB0 = ATTR_parser___ReduceAction305____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41651 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1099___init(val_t p0, int* init_table){
-  int itpos1103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1099].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
+  int itpos290 = 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[itpos1103]) return;
+  if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41653;
-  fra.me.meth = LOCATE_parser___ReduceAction1099___init;
+  fra.me.line = 9731;
+  fra.me.meth = LOCATE_parser___ReduceAction305___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41653 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9731 */
+  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[itpos1103] = 1;
+  init_table[itpos290] = 1;
   return;
 }
-void parser___ReduceAction1100___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction306___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 = 41657;
-  fra.me.meth = LOCATE_parser___ReduceAction1100___action;
+  fra.me.line = 9735;
+  fra.me.meth = LOCATE_parser___ReduceAction306___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
-  /* ./parser//parser.nit:41662 */
+  /* ./parser//parser.nit:9737 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9738 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9739 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9740 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9741 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9743 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41662);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9743);
   }
-  fra.me.REG[2] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9745 */
+  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, 9745);
+  }
+  /* ./parser//parser.nit:9746 */
+  fra.me.REG[3] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9750 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9751 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction306____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9751);
+  }
+  REGB0 = ATTR_parser___ReduceAction306____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41667 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1100___init(val_t p0, int* init_table){
-  int itpos1104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1100].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction306___init(val_t p0, val_t p1, int* init_table){
+  int itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction306].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1104]) return;
+  if (init_table[itpos291]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41669;
-  fra.me.meth = LOCATE_parser___ReduceAction1100___init;
+  fra.me.line = 9754;
+  fra.me.meth = LOCATE_parser___ReduceAction306___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41669 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9754 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction306____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1104] = 1;
+  init_table[itpos291] = 1;
   return;
 }
-void parser___ReduceAction1101___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction307___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 = 41673;
-  fra.me.meth = LOCATE_parser___ReduceAction1101___action;
+  fra.me.line = 9758;
+  fra.me.meth = LOCATE_parser___ReduceAction307___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
-  /* ./parser//parser.nit:41678 */
+  /* ./parser//parser.nit:9760 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9761 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9762 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9763 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9764 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9766 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41678);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9766);
   }
-  fra.me.REG[2] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9768 */
+  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, 9768);
+  }
+  /* ./parser//parser.nit:9769 */
+  fra.me.REG[3] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9773 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9774 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction307____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9774);
+  }
+  REGB0 = ATTR_parser___ReduceAction307____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41683 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1101___init(val_t p0, int* init_table){
-  int itpos1105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1101].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction307___init(val_t p0, val_t p1, int* init_table){
+  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction307].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1105]) return;
+  if (init_table[itpos292]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41685;
-  fra.me.meth = LOCATE_parser___ReduceAction1101___init;
+  fra.me.line = 9777;
+  fra.me.meth = LOCATE_parser___ReduceAction307___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41685 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9777 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction307____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1105] = 1;
+  init_table[itpos292] = 1;
   return;
 }
-void parser___ReduceAction1102___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction308___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 = 41689;
-  fra.me.meth = LOCATE_parser___ReduceAction1102___action;
+  fra.me.line = 9781;
+  fra.me.meth = LOCATE_parser___ReduceAction308___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:41694 */
+  /* ./parser//parser.nit:9783 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9784 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9785 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9786 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9787 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9789 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41694);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9789);
   }
-  fra.me.REG[2] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9791 */
+  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, 9791);
+  }
+  /* ./parser//parser.nit:9792 */
+  fra.me.REG[3] = NEW_ALlExpr_parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9796 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9797 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction308____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9797);
+  }
+  REGB0 = ATTR_parser___ReduceAction308____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41699 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1102___init(val_t p0, int* init_table){
-  int itpos1106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1102].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction308___init(val_t p0, val_t p1, int* init_table){
+  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction308].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1106]) return;
+  if (init_table[itpos293]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41701;
-  fra.me.meth = LOCATE_parser___ReduceAction1102___init;
+  fra.me.line = 9800;
+  fra.me.meth = LOCATE_parser___ReduceAction308___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41701 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9800 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction308____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1106] = 1;
+  init_table[itpos293] = 1;
   return;
 }
-void parser___ReduceAction1103___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction309___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 = 41705;
-  fra.me.meth = LOCATE_parser___ReduceAction1103___action;
+  fra.me.line = 9804;
+  fra.me.meth = LOCATE_parser___ReduceAction309___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41710 */
+  /* ./parser//parser.nit:9806 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9807 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9808 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9809 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9810 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9812 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41710);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9812);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  /* ./parser//parser.nit:9814 */
+  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, 9814);
+  }
+  /* ./parser//parser.nit:9815 */
+  fra.me.REG[3] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9819 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9820 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction309____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9820);
+  }
+  REGB0 = ATTR_parser___ReduceAction309____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41712 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1103___init(val_t p0, int* init_table){
-  int itpos1107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1103].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction309___init(val_t p0, val_t p1, int* init_table){
+  int itpos294 = 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[itpos1107]) return;
+  if (init_table[itpos294]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41714;
-  fra.me.meth = LOCATE_parser___ReduceAction1103___init;
+  fra.me.line = 9823;
+  fra.me.meth = LOCATE_parser___ReduceAction309___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41714 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9823 */
+  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[itpos1107] = 1;
+  init_table[itpos294] = 1;
   return;
 }
-void parser___ReduceAction1104___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[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 = 41718;
-  fra.me.meth = LOCATE_parser___ReduceAction1104___action;
+  fra.me.line = 9827;
+  fra.me.meth = LOCATE_parser___ReduceAction310___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -111556,1454 +32808,1709 @@ void parser___ReduceAction1104___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9829 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9830 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9832 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9833 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9835 */
   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:41732 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41732);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9835);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  /* ./parser//parser.nit:41734 */
+  /* ./parser//parser.nit:9837 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41734);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9837);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:41736 */
+  /* ./parser//parser.nit:9838 */
+  fra.me.REG[3] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9842 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9843 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction310____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41736);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9843);
   }
-  fra.me.REG[2] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction310____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41743 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1104___init(val_t p0, int* init_table){
-  int itpos1108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1104].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction310___init(val_t p0, val_t p1, int* init_table){
+  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction310].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1108]) return;
+  if (init_table[itpos295]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41745;
-  fra.me.meth = LOCATE_parser___ReduceAction1104___init;
+  fra.me.line = 9846;
+  fra.me.meth = LOCATE_parser___ReduceAction310___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41745 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9846 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction310____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1108] = 1;
+  init_table[itpos295] = 1;
   return;
 }
-void parser___ReduceAction1105___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction311___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 = 41749;
-  fra.me.meth = LOCATE_parser___ReduceAction1105___action;
+  fra.me.line = 9850;
+  fra.me.meth = LOCATE_parser___ReduceAction311___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9852 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9853 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9854 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9855 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9856 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:41765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41765);
-    nit_exit(1);
-  }
-  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:41767 */
+  /* ./parser//parser.nit:9858 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41767);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9858);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:41769 */
+  /* ./parser//parser.nit:9860 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41769);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9860);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:41771 */
+  /* ./parser//parser.nit:9861 */
+  fra.me.REG[3] = NEW_AGgExpr_parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9865 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9866 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction311____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41771);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9866);
   }
-  fra.me.REG[2] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(113);
+  REGB0 = ATTR_parser___ReduceAction311____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41779 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1105___init(val_t p0, int* init_table){
-  int itpos1109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1105].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction311___init(val_t p0, val_t p1, int* init_table){
+  int itpos296 = 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[itpos1109]) return;
+  if (init_table[itpos296]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41781;
-  fra.me.meth = LOCATE_parser___ReduceAction1105___init;
+  fra.me.line = 9869;
+  fra.me.meth = LOCATE_parser___ReduceAction311___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41781 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9869 */
+  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[itpos1109] = 1;
+  init_table[itpos296] = 1;
   return;
 }
-void parser___ReduceAction1106___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction312___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 = 41785;
-  fra.me.meth = LOCATE_parser___ReduceAction1106___action;
+  fra.me.line = 9873;
+  fra.me.meth = LOCATE_parser___ReduceAction312___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41790 */
+  /* ./parser//parser.nit:9875 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9876 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9877 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9878 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9879 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9881 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41790);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9881);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(114);
+  /* ./parser//parser.nit:9883 */
+  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, 9883);
+  }
+  /* ./parser//parser.nit:9884 */
+  fra.me.REG[3] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9888 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9889 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction312____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9889);
+  }
+  REGB0 = ATTR_parser___ReduceAction312____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41792 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1106___init(val_t p0, int* init_table){
-  int itpos1110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1106].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction312___init(val_t p0, val_t p1, int* init_table){
+  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction312].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1110]) return;
+  if (init_table[itpos297]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41794;
-  fra.me.meth = LOCATE_parser___ReduceAction1106___init;
+  fra.me.line = 9892;
+  fra.me.meth = LOCATE_parser___ReduceAction312___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41794 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9892 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction312____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1110] = 1;
+  init_table[itpos297] = 1;
   return;
 }
-void parser___ReduceAction1107___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[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 = 41798;
-  fra.me.meth = LOCATE_parser___ReduceAction1107___action;
+  fra.me.line = 9896;
+  fra.me.meth = LOCATE_parser___ReduceAction313___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9898 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9900 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:41810 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41810);
-    nit_exit(1);
-  }
-  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:41812 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41812);
-    nit_exit(1);
-  }
-  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:41814 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41814);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:41816 */
+  /* ./parser//parser.nit:9901 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9902 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9904 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:41817 */
   } else {
-    /* ./parser//parser.nit:41819 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9904);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41823 */
+  /* ./parser//parser.nit:9906 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41823);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9906);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:41825 */
+  /* ./parser//parser.nit:9907 */
+  fra.me.REG[3] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9911 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9912 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction313____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:41826 */
   } else {
-    /* ./parser//parser.nit:41828 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9912);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(114);
+  REGB0 = ATTR_parser___ReduceAction313____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41838 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1107___init(val_t p0, int* init_table){
-  int itpos1111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1107].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction313___init(val_t p0, val_t p1, int* init_table){
+  int itpos298 = 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[itpos1111]) return;
+  if (init_table[itpos298]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41840;
-  fra.me.meth = LOCATE_parser___ReduceAction1107___init;
+  fra.me.line = 9915;
+  fra.me.meth = LOCATE_parser___ReduceAction313___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41840 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9915 */
+  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[itpos1111] = 1;
+  init_table[itpos298] = 1;
   return;
 }
-void parser___ReduceAction1108___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction315___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 = 41844;
-  fra.me.meth = LOCATE_parser___ReduceAction1108___action;
+  fra.me.line = 9919;
+  fra.me.meth = LOCATE_parser___ReduceAction315___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9921 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9922 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9923 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:41855 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41855);
-    nit_exit(1);
-  }
-  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:41857 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41857);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:41859 */
+  /* ./parser//parser.nit:9924 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9925 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9927 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:41860 */
   } else {
-    /* ./parser//parser.nit:41862 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9927);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:41866 */
+  /* ./parser//parser.nit:9929 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41866);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9929);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:41868 */
+  /* ./parser//parser.nit:9930 */
+  fra.me.REG[3] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9934 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9935 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction315____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:41869 */
   } else {
-    /* ./parser//parser.nit:41871 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9935);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(114);
+  REGB0 = ATTR_parser___ReduceAction315____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41881 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1108___init(val_t p0, int* init_table){
-  int itpos1112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1108].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
+  int itpos299 = 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[itpos1112]) return;
+  if (init_table[itpos299]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41883;
-  fra.me.meth = LOCATE_parser___ReduceAction1108___init;
+  fra.me.line = 9938;
+  fra.me.meth = LOCATE_parser___ReduceAction315___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41883 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9938 */
+  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[itpos1112] = 1;
+  init_table[itpos299] = 1;
   return;
 }
-void parser___ReduceAction1109___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction316___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 = 41887;
-  fra.me.meth = LOCATE_parser___ReduceAction1109___action;
+  fra.me.line = 9942;
+  fra.me.meth = LOCATE_parser___ReduceAction316___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41892 */
+  /* ./parser//parser.nit:9944 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9945 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9946 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9947 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9948 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9950 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41892);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9950);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(115);
+  /* ./parser//parser.nit:9952 */
+  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, 9952);
+  }
+  /* ./parser//parser.nit:9953 */
+  fra.me.REG[3] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9957 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9958 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction316____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9958);
+  }
+  REGB0 = ATTR_parser___ReduceAction316____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41894 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1109___init(val_t p0, int* init_table){
-  int itpos1113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1109].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction316___init(val_t p0, val_t p1, int* init_table){
+  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction316].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1113]) return;
+  if (init_table[itpos300]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41896;
-  fra.me.meth = LOCATE_parser___ReduceAction1109___init;
+  fra.me.line = 9961;
+  fra.me.meth = LOCATE_parser___ReduceAction316___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41896 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9961 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction316____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1113] = 1;
+  init_table[itpos300] = 1;
   return;
 }
-void parser___ReduceAction1110___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction318___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 = 41900;
-  fra.me.meth = LOCATE_parser___ReduceAction1110___action;
+  fra.me.line = 9965;
+  fra.me.meth = LOCATE_parser___ReduceAction318___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9967 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9968 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9969 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9970 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  /* ./parser//parser.nit:41915 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41915);
-    nit_exit(1);
-  }
-  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:41917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41917);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
-  /* ./parser//parser.nit:41919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41919);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:9971 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9973 */
   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:41921 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41921);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9973);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
-  /* ./parser//parser.nit:41923 */
+  /* ./parser//parser.nit:9975 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41923);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9975);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41925 */
+  /* ./parser//parser.nit:9976 */
+  fra.me.REG[3] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:9980 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:9981 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction318____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41925);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9981);
   }
-  fra.me.REG[2] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(115);
+  REGB0 = ATTR_parser___ReduceAction318____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41935 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1110___init(val_t p0, int* init_table){
-  int itpos1114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1110].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction318___init(val_t p0, val_t p1, int* init_table){
+  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction318].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1114]) return;
+  if (init_table[itpos301]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41937;
-  fra.me.meth = LOCATE_parser___ReduceAction1110___init;
+  fra.me.line = 9984;
+  fra.me.meth = LOCATE_parser___ReduceAction318___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41937 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:9984 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction318____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1114] = 1;
+  init_table[itpos301] = 1;
   return;
 }
-void parser___ReduceAction1111___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction319___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 = 41941;
-  fra.me.meth = LOCATE_parser___ReduceAction1111___action;
+  fra.me.line = 9988;
+  fra.me.meth = LOCATE_parser___ReduceAction319___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41946 */
+  /* ./parser//parser.nit:9990 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:9991 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9992 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9993 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9994 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:9996 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41946);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9996);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(116);
+  /* ./parser//parser.nit:9998 */
+  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, 9998);
+  }
+  /* ./parser//parser.nit:9999 */
+  fra.me.REG[3] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10003 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10004 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction319____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10004);
+  }
+  REGB0 = ATTR_parser___ReduceAction319____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41948 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1111___init(val_t p0, int* init_table){
-  int itpos1115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1111].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction319___init(val_t p0, val_t p1, int* init_table){
+  int itpos302 = 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[itpos1115]) return;
+  if (init_table[itpos302]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41950;
-  fra.me.meth = LOCATE_parser___ReduceAction1111___init;
+  fra.me.line = 10007;
+  fra.me.meth = LOCATE_parser___ReduceAction319___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41950 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10007 */
+  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[itpos1115] = 1;
+  init_table[itpos302] = 1;
   return;
 }
-void parser___ReduceAction1112___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction320___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 = 41954;
-  fra.me.meth = LOCATE_parser___ReduceAction1112___action;
+  fra.me.line = 10011;
+  fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10013 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10014 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10015 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10016 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10017 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10019 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10019);
+  }
+  /* ./parser//parser.nit:10021 */
   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:41962 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41962);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10021);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41964 */
+  /* ./parser//parser.nit:10022 */
+  fra.me.REG[3] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10026 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10027 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction320____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41964);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10027);
   }
-  fra.me.REG[2] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(116);
+  REGB0 = ATTR_parser___ReduceAction320____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41970 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1112___init(val_t p0, int* init_table){
-  int itpos1116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1112].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
+  int itpos303 = 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[itpos1116]) return;
+  if (init_table[itpos303]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41972;
-  fra.me.meth = LOCATE_parser___ReduceAction1112___init;
+  fra.me.line = 10030;
+  fra.me.meth = LOCATE_parser___ReduceAction320___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41972 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10030 */
+  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[itpos1116] = 1;
+  init_table[itpos303] = 1;
   return;
 }
-void parser___ReduceAction1113___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction322___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 = 41976;
-  fra.me.meth = LOCATE_parser___ReduceAction1113___action;
+  fra.me.line = 10034;
+  fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10036 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10037 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10038 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10039 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10041 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10041);
+  }
+  /* ./parser//parser.nit:10043 */
   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:41984 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41984);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10043);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:41986 */
+  /* ./parser//parser.nit:10044 */
+  fra.me.REG[3] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10048 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10049 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction322____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 41986);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10049);
   }
-  fra.me.REG[2] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(116);
+  REGB0 = ATTR_parser___ReduceAction322____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:41992 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1113___init(val_t p0, int* init_table){
-  int itpos1117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1113].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
+  int itpos304 = 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[itpos1117]) return;
+  if (init_table[itpos304]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 41994;
-  fra.me.meth = LOCATE_parser___ReduceAction1113___init;
+  fra.me.line = 10052;
+  fra.me.meth = LOCATE_parser___ReduceAction322___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:41994 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10052 */
+  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[itpos1117] = 1;
+  init_table[itpos304] = 1;
   return;
 }
-void parser___ReduceAction1114___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction323___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 = 41998;
-  fra.me.meth = LOCATE_parser___ReduceAction1114___action;
+  fra.me.line = 10056;
+  fra.me.meth = LOCATE_parser___ReduceAction323___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42003 */
+  /* ./parser//parser.nit:10058 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10059 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10060 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10061 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10063 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42003);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10063);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(117);
+  /* ./parser//parser.nit:10065 */
+  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, 10065);
+  }
+  /* ./parser//parser.nit:10066 */
+  fra.me.REG[3] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10070 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10071 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction323____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10071);
+  }
+  REGB0 = ATTR_parser___ReduceAction323____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42005 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1114___init(val_t p0, int* init_table){
-  int itpos1118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1114].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
+  int itpos305 = 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[itpos1118]) return;
+  if (init_table[itpos305]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42007;
-  fra.me.meth = LOCATE_parser___ReduceAction1114___init;
+  fra.me.line = 10074;
+  fra.me.meth = LOCATE_parser___ReduceAction323___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42007 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10074 */
+  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[itpos1118] = 1;
+  init_table[itpos305] = 1;
   return;
 }
-void parser___ReduceAction1115___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction325___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 = 42011;
-  fra.me.meth = LOCATE_parser___ReduceAction1115___action;
+  fra.me.line = 10078;
+  fra.me.meth = LOCATE_parser___ReduceAction325___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10080 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10081 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:42018 */
+  /* ./parser//parser.nit:10082 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10083 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10084 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10085 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10087 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42018);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10087);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42020 */
+  /* ./parser//parser.nit:10089 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42020);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10089);
   }
-  fra.me.REG[2] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(117);
+  /* ./parser//parser.nit:10091 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10091);
+  }
+  /* ./parser//parser.nit:10092 */
+  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:10093 */
+  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:10099 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:10100 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction325____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10100);
+  }
+  REGB0 = ATTR_parser___ReduceAction325____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42026 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1115___init(val_t p0, int* init_table){
-  int itpos1119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1115].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
+  int itpos306 = 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[itpos1119]) return;
+  if (init_table[itpos306]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42028;
-  fra.me.meth = LOCATE_parser___ReduceAction1115___init;
+  fra.me.line = 10103;
+  fra.me.meth = LOCATE_parser___ReduceAction325___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42028 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10103 */
+  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[itpos1119] = 1;
+  init_table[itpos306] = 1;
   return;
 }
-void parser___ReduceAction1116___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction326___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 = 42032;
-  fra.me.meth = LOCATE_parser___ReduceAction1116___action;
+  fra.me.line = 10107;
+  fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42037 */
+  /* ./parser//parser.nit:10109 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10110 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10111 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10112 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10113 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10114 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10116 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42037);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10116);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  /* ./parser//parser.nit:10118 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10118);
+  }
+  /* ./parser//parser.nit:10120 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10120);
+  }
+  /* ./parser//parser.nit:10121 */
+  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:10126 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10127 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction326____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10127);
+  }
+  REGB0 = ATTR_parser___ReduceAction326____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42039 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1116___init(val_t p0, int* init_table){
-  int itpos1120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1116].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
+  int itpos307 = 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[itpos1120]) return;
+  if (init_table[itpos307]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42041;
-  fra.me.meth = LOCATE_parser___ReduceAction1116___init;
+  fra.me.line = 10130;
+  fra.me.meth = LOCATE_parser___ReduceAction326___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42041 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10130 */
+  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[itpos1120] = 1;
+  init_table[itpos307] = 1;
   return;
 }
-void parser___ReduceAction1117___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction327___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 = 42045;
-  fra.me.meth = LOCATE_parser___ReduceAction1117___action;
+  fra.me.line = 10134;
+  fra.me.meth = LOCATE_parser___ReduceAction327___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10136 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10137 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42053 */
+  /* ./parser//parser.nit:10138 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10140 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42053);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10140);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42055 */
+  /* ./parser//parser.nit:10141 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:10144 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42055);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10144);
   }
-  fra.me.REG[2] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  /* ./parser//parser.nit:10145 */
+  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:10150 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10151 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction327____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10151);
+  }
+  REGB0 = ATTR_parser___ReduceAction327____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42061 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1117___init(val_t p0, int* init_table){
-  int itpos1121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1117].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
+  int itpos308 = 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[itpos1121]) return;
+  if (init_table[itpos308]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42063;
-  fra.me.meth = LOCATE_parser___ReduceAction1117___init;
+  fra.me.line = 10154;
+  fra.me.meth = LOCATE_parser___ReduceAction327___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42063 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10154 */
+  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[itpos1121] = 1;
+  init_table[itpos308] = 1;
   return;
 }
-void parser___ReduceAction1118___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction328___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 = 42067;
-  fra.me.meth = LOCATE_parser___ReduceAction1118___action;
+  fra.me.line = 10158;
+  fra.me.meth = LOCATE_parser___ReduceAction328___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10160 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10161 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42075 */
+  /* ./parser//parser.nit:10162 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10163 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10164 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10166 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42075);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10166);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42077 */
+  /* ./parser//parser.nit:10168 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42077);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10168);
   }
-  fra.me.REG[2] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  /* ./parser//parser.nit:10169 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10173 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10174 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction328____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10174);
+  }
+  REGB0 = ATTR_parser___ReduceAction328____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42083 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1118___init(val_t p0, int* init_table){
-  int itpos1122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1118].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
+  int itpos309 = 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[itpos1122]) return;
+  if (init_table[itpos309]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42085;
-  fra.me.meth = LOCATE_parser___ReduceAction1118___init;
+  fra.me.line = 10177;
+  fra.me.meth = LOCATE_parser___ReduceAction328___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42085 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10177 */
+  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[itpos1122] = 1;
+  init_table[itpos309] = 1;
   return;
 }
-void parser___ReduceAction1119___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction329___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 = 42089;
-  fra.me.meth = LOCATE_parser___ReduceAction1119___action;
+  fra.me.line = 10181;
+  fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10183 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10184 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42097 */
+  /* ./parser//parser.nit:10185 */
+  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:10188 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42097);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10188);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42099 */
+  /* ./parser//parser.nit:10189 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10193 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10194 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction329____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42099);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10194);
   }
-  fra.me.REG[2] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction329____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42105 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1119___init(val_t p0, int* init_table){
-  int itpos1123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1119].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
+  int itpos310 = 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[itpos1123]) return;
+  if (init_table[itpos310]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42107;
-  fra.me.meth = LOCATE_parser___ReduceAction1119___init;
+  fra.me.line = 10197;
+  fra.me.meth = LOCATE_parser___ReduceAction329___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42107 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10197 */
+  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[itpos1123] = 1;
+  init_table[itpos310] = 1;
   return;
 }
-void parser___ReduceAction1120___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction336___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 = 42111;
-  fra.me.meth = LOCATE_parser___ReduceAction1120___action;
+  fra.me.line = 10201;
+  fra.me.meth = LOCATE_parser___ReduceAction336___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10203 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10204 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42119 */
+  /* ./parser//parser.nit:10205 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10206 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10207 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10209 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10209);
+  }
+  /* ./parser//parser.nit:10211 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42119);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10211);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42121 */
+  /* ./parser//parser.nit:10212 */
+  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:10213 */
+  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:10218 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:10219 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction336____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42121);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10219);
   }
-  fra.me.REG[2] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction336____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42127 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1120___init(val_t p0, int* init_table){
-  int itpos1124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1120].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
+  int itpos311 = 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[itpos1124]) return;
+  if (init_table[itpos311]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42129;
-  fra.me.meth = LOCATE_parser___ReduceAction1120___init;
+  fra.me.line = 10222;
+  fra.me.meth = LOCATE_parser___ReduceAction336___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42129 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10222 */
+  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[itpos1124] = 1;
+  init_table[itpos311] = 1;
   return;
 }
-void parser___ReduceAction1121___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction337___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 = 42133;
-  fra.me.meth = LOCATE_parser___ReduceAction1121___action;
+  fra.me.line = 10226;
+  fra.me.meth = LOCATE_parser___ReduceAction337___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10228 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42141 */
+  /* ./parser//parser.nit:10230 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10231 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10232 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10233 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10234 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10235 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10236 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10238 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42141);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10238);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42143 */
+  /* ./parser//parser.nit:10240 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42143);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10240);
   }
-  fra.me.REG[2] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  /* ./parser//parser.nit:10242 */
+  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, 10242);
+  }
+  /* ./parser//parser.nit:10244 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10244);
+  }
+  /* ./parser//parser.nit:10245 */
+  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:10246 */
+  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:10252 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:10253 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction337____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10253);
+  }
+  REGB0 = ATTR_parser___ReduceAction337____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42149 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1121___init(val_t p0, int* init_table){
-  int itpos1125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1121].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction337___init(val_t p0, val_t p1, int* init_table){
+  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction337].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1125]) return;
+  if (init_table[itpos312]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42151;
-  fra.me.meth = LOCATE_parser___ReduceAction1121___init;
+  fra.me.line = 10256;
+  fra.me.meth = LOCATE_parser___ReduceAction337___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42151 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10256 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction337____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1125] = 1;
+  init_table[itpos312] = 1;
   return;
 }
-void parser___ReduceAction1122___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction338___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 = 42155;
-  fra.me.meth = LOCATE_parser___ReduceAction1122___action;
+  fra.me.line = 10260;
+  fra.me.meth = LOCATE_parser___ReduceAction338___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10262 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10263 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10264 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10265 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10266 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10267 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10268 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10269 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10270 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10271 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10273 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10273);
+  }
+  /* ./parser//parser.nit:10275 */
   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:42163 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42163);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10275);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42165 */
+  /* ./parser//parser.nit:10276 */
+  fra.me.REG[3] = NEW_ACrangeExpr_parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10280 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10281 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction338____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42165);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10281);
   }
-  fra.me.REG[2] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction338____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42171 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1122___init(val_t p0, int* init_table){
-  int itpos1126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1122].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction338___init(val_t p0, val_t p1, int* init_table){
+  int itpos313 = 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[itpos1126]) return;
+  if (init_table[itpos313]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42173;
-  fra.me.meth = LOCATE_parser___ReduceAction1122___init;
+  fra.me.line = 10284;
+  fra.me.meth = LOCATE_parser___ReduceAction338___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42173 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10284 */
+  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[itpos1126] = 1;
+  init_table[itpos313] = 1;
   return;
 }
-void parser___ReduceAction1123___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction339___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 = 42177;
-  fra.me.meth = LOCATE_parser___ReduceAction1123___action;
+  fra.me.line = 10288;
+  fra.me.meth = LOCATE_parser___ReduceAction339___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10290 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10292 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10293 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10294 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10295 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10296 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10297 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10298 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10299 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10301 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10301);
+  }
+  /* ./parser//parser.nit:10303 */
   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:42185 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42185);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10303);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42187 */
+  /* ./parser//parser.nit:10304 */
+  fra.me.REG[3] = NEW_AOrangeExpr_parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10308 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10309 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction339____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42187);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10309);
   }
-  fra.me.REG[2] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction339____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42193 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1123___init(val_t p0, int* init_table){
-  int itpos1127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1123].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
+  int itpos314 = 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[itpos1127]) return;
+  if (init_table[itpos314]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42195;
-  fra.me.meth = LOCATE_parser___ReduceAction1123___init;
+  fra.me.line = 10312;
+  fra.me.meth = LOCATE_parser___ReduceAction339___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42195 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10312 */
+  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[itpos1127] = 1;
+  init_table[itpos314] = 1;
   return;
 }
-void parser___ReduceAction1124___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction340___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 = 42199;
-  fra.me.meth = LOCATE_parser___ReduceAction1124___action;
+  fra.me.line = 10316;
+  fra.me.meth = LOCATE_parser___ReduceAction340___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10318 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10319 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42207 */
+  /* ./parser//parser.nit:10320 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10322 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42207);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10322);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42209 */
+  /* ./parser//parser.nit:10323 */
+  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:10324 */
+  fra.me.REG[4] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
+  /* ./parser//parser.nit:10327 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10328 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction340____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42209);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10328);
   }
-  fra.me.REG[2] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction340____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42215 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1124___init(val_t p0, int* init_table){
-  int itpos1128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1124].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction340___init(val_t p0, val_t p1, int* init_table){
+  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction340].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1128]) return;
+  if (init_table[itpos315]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42217;
-  fra.me.meth = LOCATE_parser___ReduceAction1124___init;
+  fra.me.line = 10331;
+  fra.me.meth = LOCATE_parser___ReduceAction340___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42217 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10331 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction340____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1128] = 1;
+  init_table[itpos315] = 1;
   return;
 }
-void parser___ReduceAction1125___action(val_t p0, val_t p1){
+void parser___ReduceAction341___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 = 42221;
-  fra.me.meth = LOCATE_parser___ReduceAction1125___action;
+  fra.me.line = 10335;
+  fra.me.meth = LOCATE_parser___ReduceAction341___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113012,115 +34519,130 @@ void parser___ReduceAction1125___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10337 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10338 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42229 */
+  /* ./parser//parser.nit:10340 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42229);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10340);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:42231 */
+  /* ./parser//parser.nit:10341 */
+  fra.me.REG[3] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10344 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10345 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction341____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42231);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10345);
   }
-  fra.me.REG[2] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(118);
+  REGB0 = ATTR_parser___ReduceAction341____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42237 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1125___init(val_t p0, int* init_table){
-  int itpos1129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1125].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction341___init(val_t p0, val_t p1, int* init_table){
+  int itpos316 = 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[itpos1129]) return;
+  if (init_table[itpos316]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42239;
-  fra.me.meth = LOCATE_parser___ReduceAction1125___init;
+  fra.me.line = 10348;
+  fra.me.meth = LOCATE_parser___ReduceAction341___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42239 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10348 */
+  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[itpos1129] = 1;
+  init_table[itpos316] = 1;
   return;
 }
-void parser___ReduceAction1126___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction342___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 = 42243;
-  fra.me.meth = LOCATE_parser___ReduceAction1126___action;
+  fra.me.line = 10352;
+  fra.me.meth = LOCATE_parser___ReduceAction342___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42248 */
+  /* ./parser//parser.nit:10354 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10355 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10357 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42248);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10357);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(119);
+  /* ./parser//parser.nit:10358 */
+  fra.me.REG[3] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10361 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10362 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction342____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10362);
+  }
+  REGB0 = ATTR_parser___ReduceAction342____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42250 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1126___init(val_t p0, int* init_table){
-  int itpos1130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1126].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
+  int itpos317 = 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[itpos1130]) return;
+  if (init_table[itpos317]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42252;
-  fra.me.meth = LOCATE_parser___ReduceAction1126___init;
+  fra.me.line = 10365;
+  fra.me.meth = LOCATE_parser___ReduceAction342___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42252 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10365 */
+  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[itpos1130] = 1;
+  init_table[itpos317] = 1;
   return;
 }
-void parser___ReduceAction1127___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[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 = 42256;
-  fra.me.meth = LOCATE_parser___ReduceAction1127___action;
+  fra.me.line = 10369;
+  fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113129,63 +34651,64 @@ void parser___ReduceAction1127___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10371 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10372 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42264 */
+  /* ./parser//parser.nit:10374 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42264);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10374);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42266 */
+  /* ./parser//parser.nit:10375 */
+  fra.me.REG[3] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10378 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10379 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction343____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42266);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10379);
   }
-  fra.me.REG[2] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(119);
+  REGB0 = ATTR_parser___ReduceAction343____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42272 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1127___init(val_t p0, int* init_table){
-  int itpos1131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1127].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
+  int itpos318 = 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[itpos1131]) return;
+  if (init_table[itpos318]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42274;
-  fra.me.meth = LOCATE_parser___ReduceAction1127___init;
+  fra.me.line = 10382;
+  fra.me.meth = LOCATE_parser___ReduceAction343___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42274 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10382 */
+  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[itpos1131] = 1;
+  init_table[itpos318] = 1;
   return;
 }
-void parser___ReduceAction1128___action(val_t p0, val_t p1){
+void parser___ReduceAction344___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 = 42278;
-  fra.me.meth = LOCATE_parser___ReduceAction1128___action;
+  fra.me.line = 10386;
+  fra.me.meth = LOCATE_parser___ReduceAction344___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113194,115 +34717,130 @@ void parser___ReduceAction1128___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10388 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42286 */
+  /* ./parser//parser.nit:10391 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42286);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10391);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42288 */
+  /* ./parser//parser.nit:10392 */
+  fra.me.REG[3] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10395 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10396 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction344____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42288);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10396);
   }
-  fra.me.REG[2] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(119);
+  REGB0 = ATTR_parser___ReduceAction344____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42294 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1128___init(val_t p0, int* init_table){
-  int itpos1132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1128].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
+  int itpos319 = 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[itpos1132]) return;
+  if (init_table[itpos319]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42296;
-  fra.me.meth = LOCATE_parser___ReduceAction1128___init;
+  fra.me.line = 10399;
+  fra.me.meth = LOCATE_parser___ReduceAction344___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42296 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10399 */
+  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[itpos1132] = 1;
+  init_table[itpos319] = 1;
   return;
 }
-void parser___ReduceAction1129___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction345___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 = 42300;
-  fra.me.meth = LOCATE_parser___ReduceAction1129___action;
+  fra.me.line = 10403;
+  fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42305 */
+  /* ./parser//parser.nit:10405 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10406 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10408 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42305);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10408);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(120);
+  /* ./parser//parser.nit:10409 */
+  fra.me.REG[3] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10412 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10413 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction345____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10413);
+  }
+  REGB0 = ATTR_parser___ReduceAction345____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42307 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1129___init(val_t p0, int* init_table){
-  int itpos1133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1129].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
+  int itpos320 = 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[itpos1133]) return;
+  if (init_table[itpos320]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42309;
-  fra.me.meth = LOCATE_parser___ReduceAction1129___init;
+  fra.me.line = 10416;
+  fra.me.meth = LOCATE_parser___ReduceAction345___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42309 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10416 */
+  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[itpos1133] = 1;
+  init_table[itpos320] = 1;
   return;
 }
-void parser___ReduceAction1130___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[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 = 42313;
-  fra.me.meth = LOCATE_parser___ReduceAction1130___action;
+  fra.me.line = 10420;
+  fra.me.meth = LOCATE_parser___ReduceAction346___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113311,63 +34849,64 @@ void parser___ReduceAction1130___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10422 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42321 */
+  /* ./parser//parser.nit:10425 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42321);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10425);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42323 */
+  /* ./parser//parser.nit:10426 */
+  fra.me.REG[3] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10429 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10430 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction346____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42323);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10430);
   }
-  fra.me.REG[2] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(120);
+  REGB0 = ATTR_parser___ReduceAction346____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42329 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1130___init(val_t p0, int* init_table){
-  int itpos1134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1130].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction346___init(val_t p0, val_t p1, int* init_table){
+  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction346].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1134]) return;
+  if (init_table[itpos321]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42331;
-  fra.me.meth = LOCATE_parser___ReduceAction1130___init;
+  fra.me.line = 10433;
+  fra.me.meth = LOCATE_parser___ReduceAction346___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42331 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10433 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction346____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1134] = 1;
+  init_table[itpos321] = 1;
   return;
 }
-void parser___ReduceAction1131___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[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 = 42335;
-  fra.me.meth = LOCATE_parser___ReduceAction1131___action;
+  fra.me.line = 10437;
+  fra.me.meth = LOCATE_parser___ReduceAction347___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113376,63 +34915,64 @@ void parser___ReduceAction1131___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10439 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10440 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42343 */
+  /* ./parser//parser.nit:10442 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42343);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10442);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42345 */
+  /* ./parser//parser.nit:10443 */
+  fra.me.REG[3] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10446 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10447 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction347____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42345);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10447);
   }
-  fra.me.REG[2] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(120);
+  REGB0 = ATTR_parser___ReduceAction347____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42351 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1131___init(val_t p0, int* init_table){
-  int itpos1135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1131].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction347___init(val_t p0, val_t p1, int* init_table){
+  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction347].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1135]) return;
+  if (init_table[itpos322]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42353;
-  fra.me.meth = LOCATE_parser___ReduceAction1131___init;
+  fra.me.line = 10450;
+  fra.me.meth = LOCATE_parser___ReduceAction347___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42353 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10450 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction347____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1135] = 1;
+  init_table[itpos322] = 1;
   return;
 }
-void parser___ReduceAction1132___action(val_t p0, val_t p1){
+void parser___ReduceAction348___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 = 42357;
-  fra.me.meth = LOCATE_parser___ReduceAction1132___action;
+  fra.me.line = 10454;
+  fra.me.meth = LOCATE_parser___ReduceAction348___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113441,295 +34981,484 @@ void parser___ReduceAction1132___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10456 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10457 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42365 */
+  /* ./parser//parser.nit:10459 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42365);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10459);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42367 */
+  /* ./parser//parser.nit:10460 */
+  fra.me.REG[3] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10463 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10464 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction348____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42367);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10464);
   }
-  fra.me.REG[2] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(120);
+  REGB0 = ATTR_parser___ReduceAction348____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42373 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1132___init(val_t p0, int* init_table){
-  int itpos1136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1132].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction348___init(val_t p0, val_t p1, int* init_table){
+  int itpos323 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction348].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1136]) return;
+  if (init_table[itpos323]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42375;
-  fra.me.meth = LOCATE_parser___ReduceAction1132___init;
+  fra.me.line = 10467;
+  fra.me.meth = LOCATE_parser___ReduceAction348___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42375 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10467 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction348____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1136] = 1;
+  init_table[itpos323] = 1;
   return;
 }
-void parser___ReduceAction1133___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction351___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 = 42379;
-  fra.me.meth = LOCATE_parser___ReduceAction1133___action;
+  fra.me.line = 10471;
+  fra.me.meth = LOCATE_parser___ReduceAction351___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42384 */
+  /* ./parser//parser.nit:10473 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10474 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10475 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10476 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10477 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10478 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10479 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10480 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10481 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10482 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10483 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10485 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42384);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10485);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(121);
+  /* ./parser//parser.nit:10487 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10487);
+  }
+  /* ./parser//parser.nit:10489 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10489);
+  }
+  /* ./parser//parser.nit:10490 */
+  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:10495 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10496 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction351____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10496);
+  }
+  REGB0 = ATTR_parser___ReduceAction351____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42386 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1133___init(val_t p0, int* init_table){
-  int itpos1137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1133].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction351___init(val_t p0, val_t p1, int* init_table){
+  int itpos324 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction351].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1137]) return;
+  if (init_table[itpos324]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42388;
-  fra.me.meth = LOCATE_parser___ReduceAction1133___init;
+  fra.me.line = 10499;
+  fra.me.meth = LOCATE_parser___ReduceAction351___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42388 */
+  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___ReduceAction351____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1137] = 1;
+  init_table[itpos324] = 1;
   return;
 }
-void parser___ReduceAction1134___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction352___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 = 42392;
-  fra.me.meth = LOCATE_parser___ReduceAction1134___action;
+  fra.me.line = 10503;
+  fra.me.meth = LOCATE_parser___ReduceAction352___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10505 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10506 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10507 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42399 */
+  /* ./parser//parser.nit:10508 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10509 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10510 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10511 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10512 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10513 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10514 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10515 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10516 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10517 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10519 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42399);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10519);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42401 */
+  /* ./parser//parser.nit:10521 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42401);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10521);
   }
-  fra.me.REG[2] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(121);
+  /* ./parser//parser.nit:10523 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10523);
+  }
+  /* ./parser//parser.nit:10525 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10525);
+  }
+  /* ./parser//parser.nit:10526 */
+  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:10532 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10533 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction352____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10533);
+  }
+  REGB0 = ATTR_parser___ReduceAction352____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42407 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1134___init(val_t p0, int* init_table){
-  int itpos1138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1134].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction352___init(val_t p0, val_t p1, int* init_table){
+  int itpos325 = 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[itpos1138]) return;
+  if (init_table[itpos325]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42409;
-  fra.me.meth = LOCATE_parser___ReduceAction1134___init;
+  fra.me.line = 10536;
+  fra.me.meth = LOCATE_parser___ReduceAction352___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42409 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10536 */
+  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[itpos1138] = 1;
+  init_table[itpos325] = 1;
   return;
 }
-void parser___ReduceAction1135___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction353___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 = 42413;
-  fra.me.meth = LOCATE_parser___ReduceAction1135___action;
+  fra.me.line = 10540;
+  fra.me.meth = LOCATE_parser___ReduceAction353___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10542 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10543 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
-  /* ./parser//parser.nit:42420 */
+  /* ./parser//parser.nit:10544 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10545 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10547 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42420);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10547);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42422 */
+  /* ./parser//parser.nit:10549 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42422);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10549);
   }
-  fra.me.REG[2] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(121);
+  /* ./parser//parser.nit:10550 */
+  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:10551 */
+  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));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:10552 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:10554 */
+  fra.me.REG[5] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
+  /* ./parser//parser.nit:10557 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:10558 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction353____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10558);
+  }
+  REGB0 = ATTR_parser___ReduceAction353____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42428 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1135___init(val_t p0, int* init_table){
-  int itpos1139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1135].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
+  int itpos326 = 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[itpos1139]) return;
+  if (init_table[itpos326]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42430;
-  fra.me.meth = LOCATE_parser___ReduceAction1135___init;
+  fra.me.line = 10561;
+  fra.me.meth = LOCATE_parser___ReduceAction353___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42430 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10561 */
+  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[itpos1139] = 1;
+  init_table[itpos326] = 1;
   return;
 }
-void parser___ReduceAction1136___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction354___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 = 42434;
-  fra.me.meth = LOCATE_parser___ReduceAction1136___action;
+  fra.me.line = 10565;
+  fra.me.meth = LOCATE_parser___ReduceAction354___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42439 */
+  /* ./parser//parser.nit:10567 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10568 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10569 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10570 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10571 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10573 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10573);
+  }
+  /* ./parser//parser.nit:10575 */
+  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, 10575);
+  }
+  /* ./parser//parser.nit:10577 */
+  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, 10577);
+  }
+  /* ./parser//parser.nit:10578 */
+  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:10579 */
+  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:10580 */
+  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));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:10581 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:10583 */
+  fra.me.REG[6] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
+  /* ./parser//parser.nit:10586 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:10587 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction354____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42439);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10587);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(122);
+  REGB0 = ATTR_parser___ReduceAction354____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42441 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1136___init(val_t p0, int* init_table){
-  int itpos1140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1136].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
+  int itpos327 = 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[itpos1140]) return;
+  if (init_table[itpos327]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42443;
-  fra.me.meth = LOCATE_parser___ReduceAction1136___init;
+  fra.me.line = 10590;
+  fra.me.meth = LOCATE_parser___ReduceAction354___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42443 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10590 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1140] = 1;
+  init_table[itpos327] = 1;
   return;
 }
-void parser___ReduceAction1137___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[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 = 42447;
-  fra.me.meth = LOCATE_parser___ReduceAction1137___action;
+  fra.me.line = 10594;
+  fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -113740,154 +35469,166 @@ void parser___ReduceAction1137___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10596 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10597 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10598 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10599 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10600 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10601 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  /* ./parser//parser.nit:42456 */
+  /* ./parser//parser.nit:10604 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42456);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:42458 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42458);
-    nit_exit(1);
+    /* ./parser//parser.nit:10605 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42460 */
+  /* ./parser//parser.nit:10607 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42460);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:10608 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:42462 */
+  /* ./parser//parser.nit:10610 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:10611 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction355____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:42463 */
   } else {
-    /* ./parser//parser.nit:42465 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10611);
   }
-  fra.me.REG[5] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(122);
+  REGB0 = ATTR_parser___ReduceAction355____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42475 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1137___init(val_t p0, int* init_table){
-  int itpos1141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1137].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
+  int itpos328 = 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[itpos1141]) return;
+  if (init_table[itpos328]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42477;
-  fra.me.meth = LOCATE_parser___ReduceAction1137___init;
+  fra.me.line = 10614;
+  fra.me.meth = LOCATE_parser___ReduceAction355___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42477 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10614 */
+  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[itpos1141] = 1;
+  init_table[itpos328] = 1;
   return;
 }
-void parser___ReduceAction1138___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction356___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 = 42481;
-  fra.me.meth = LOCATE_parser___ReduceAction1138___action;
+  fra.me.line = 10618;
+  fra.me.meth = LOCATE_parser___ReduceAction356___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10620 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10621 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42488 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42488);
-    nit_exit(1);
-  }
-  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:42490 */
+  /* ./parser//parser.nit:10623 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42490);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10623);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:42492 */
+  /* ./parser//parser.nit:10624 */
+  fra.me.REG[3] = NEW_AStartStringExpr_parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10627 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10628 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction356____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42492);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10628);
   }
-  fra.me.REG[2] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(122);
+  REGB0 = ATTR_parser___ReduceAction356____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42499 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1138___init(val_t p0, int* init_table){
-  int itpos1142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1138].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
+  int itpos329 = 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[itpos1142]) return;
+  if (init_table[itpos329]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42501;
-  fra.me.meth = LOCATE_parser___ReduceAction1138___init;
+  fra.me.line = 10631;
+  fra.me.meth = LOCATE_parser___ReduceAction356___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42501 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10631 */
+  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[itpos1142] = 1;
+  init_table[itpos329] = 1;
   return;
 }
-void parser___ReduceAction1139___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[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 = 42505;
-  fra.me.meth = LOCATE_parser___ReduceAction1139___action;
+  fra.me.line = 10635;
+  fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -113896,147 +35637,131 @@ void parser___ReduceAction1139___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10637 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10638 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42511 */
+  /* ./parser//parser.nit:10640 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMidString, ID_TMidString)) /*cast nullable TMidString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42511);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10640);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
-  /* ./parser//parser.nit:42513 */
+  /* ./parser//parser.nit:10641 */
+  fra.me.REG[3] = NEW_AMidStringExpr_parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10644 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10645 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction358____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42513);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10645);
   }
-  fra.me.REG[2] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction358____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42519 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1139___init(val_t p0, int* init_table){
-  int itpos1143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1139].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
+  int itpos330 = 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[itpos1143]) return;
+  if (init_table[itpos330]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42521;
-  fra.me.meth = LOCATE_parser___ReduceAction1139___init;
+  fra.me.line = 10648;
+  fra.me.meth = LOCATE_parser___ReduceAction358___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42521 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10648 */
+  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[itpos1143] = 1;
+  init_table[itpos330] = 1;
   return;
 }
-void parser___ReduceAction1140___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction359___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 = 42525;
-  fra.me.meth = LOCATE_parser___ReduceAction1140___action;
+  fra.me.line = 10652;
+  fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10654 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10655 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:42534 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42534);
-    nit_exit(1);
-  }
-  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:42536 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42536);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42538 */
+  /* ./parser//parser.nit:10657 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42538);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10657);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:42540 */
+  /* ./parser//parser.nit:10658 */
+  fra.me.REG[3] = NEW_AEndStringExpr_parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
+  /* ./parser//parser.nit:10661 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10662 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction359____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:42541 */
   } else {
-    /* ./parser//parser.nit:42543 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10662);
   }
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction359____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42553 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1140___init(val_t p0, int* init_table){
-  int itpos1144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1140].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
+  int itpos331 = 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[itpos1144]) return;
+  if (init_table[itpos331]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42555;
-  fra.me.meth = LOCATE_parser___ReduceAction1140___init;
+  fra.me.line = 10665;
+  fra.me.meth = LOCATE_parser___ReduceAction359___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42555 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10665 */
+  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[itpos1144] = 1;
+  init_table[itpos331] = 1;
   return;
 }
-void parser___ReduceAction1141___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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42559;
-  fra.me.meth = LOCATE_parser___ReduceAction1141___action;
+  fra.me.line = 10669;
+  fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -114046,71 +35771,85 @@ void parser___ReduceAction1141___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10671 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10672 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10673 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10674 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10675 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10676 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10677 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:42566 */
+  /* ./parser//parser.nit:10679 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42566);
-    nit_exit(1);
+    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((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42568 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42568);
-    nit_exit(1);
+    /* ./parser//parser.nit:10680 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:42570 */
+  /* ./parser//parser.nit:10682 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10683 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction360____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:42571 */
   } else {
-    /* ./parser//parser.nit:42573 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10683);
   }
-  fra.me.REG[4] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction360____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42582 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1141___init(val_t p0, int* init_table){
-  int itpos1145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1141].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
+  int itpos332 = 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[itpos1145]) return;
+  if (init_table[itpos332]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42584;
-  fra.me.meth = LOCATE_parser___ReduceAction1141___init;
+  fra.me.line = 10686;
+  fra.me.meth = LOCATE_parser___ReduceAction360___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42584 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10686 */
+  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[itpos1145] = 1;
+  init_table[itpos332] = 1;
   return;
 }
-void parser___ReduceAction1142___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[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 = 42588;
-  fra.me.meth = LOCATE_parser___ReduceAction1142___action;
+  fra.me.line = 10690;
+  fra.me.meth = LOCATE_parser___ReduceAction361___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -114121,1262 +35860,1168 @@ void parser___ReduceAction1142___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10692 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10693 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10695 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10696 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10697 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10698 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10699 */
   fra.me.REG[5] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
-  /* ./parser//parser.nit:42596 */
+  /* ./parser//parser.nit:10702 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42596);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10702);
   }
-  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:42598 */
+  /* ./parser//parser.nit:10703 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42598);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42600 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42600);
-    nit_exit(1);
+    /* ./parser//parser.nit:10704 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:42602 */
+  /* ./parser//parser.nit:10706 */
+  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:10707 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:10708 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction361____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:42603 */
   } else {
-    /* ./parser//parser.nit:42605 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10708);
   }
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction361____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42614 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1142___init(val_t p0, int* init_table){
-  int itpos1146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1142].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
+  int itpos333 = 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[itpos1146]) return;
+  if (init_table[itpos333]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42616;
-  fra.me.meth = LOCATE_parser___ReduceAction1142___init;
+  fra.me.line = 10711;
+  fra.me.meth = LOCATE_parser___ReduceAction361___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42616 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10711 */
+  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[itpos1146] = 1;
+  init_table[itpos333] = 1;
   return;
 }
-void parser___ReduceAction1143___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction363___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 = 42620;
-  fra.me.meth = LOCATE_parser___ReduceAction1143___action;
+  fra.me.line = 10715;
+  fra.me.meth = LOCATE_parser___ReduceAction363___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  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:42628 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42628);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
-  /* ./parser//parser.nit:42630 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42630);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42632 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42632);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:42634 */
+  /* ./parser//parser.nit:10717 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10718 */
+  fra.me.REG[3] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10719 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10720 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction363____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[2];
-  /* ./parser//parser.nit:42635 */
   } else {
-    /* ./parser//parser.nit:42637 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10720);
   }
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  fra.me.REG[0] = fra.me.REG[5];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction363____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42646 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1143___init(val_t p0, int* init_table){
-  int itpos1147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1143].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
+  int itpos334 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction363].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1147]) return;
+  if (init_table[itpos334]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42648;
-  fra.me.meth = LOCATE_parser___ReduceAction1143___init;
+  fra.me.line = 10723;
+  fra.me.meth = LOCATE_parser___ReduceAction363___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42648 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10723 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1147] = 1;
+  init_table[itpos334] = 1;
   return;
 }
-void parser___ReduceAction1144___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42652;
-  fra.me.meth = LOCATE_parser___ReduceAction1144___action;
+  fra.me.line = 10727;
+  fra.me.meth = LOCATE_parser___ReduceAction366___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10729 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  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:42664 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42664);
-    nit_exit(1);
-  }
-  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:42666 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42666);
-    nit_exit(1);
-  }
-  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:42668 */
+  /* ./parser//parser.nit:10731 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10733 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42668);
-    nit_exit(1);
+    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((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42670 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42670);
-    nit_exit(1);
+    /* ./parser//parser.nit:10734 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:42672 */
+  /* ./parser//parser.nit:10736 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10737 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction366____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:42673 */
   } else {
-    /* ./parser//parser.nit:42675 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10737);
   }
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction366____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42685 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1144___init(val_t p0, int* init_table){
-  int itpos1148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1144].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction366___init(val_t p0, val_t p1, int* init_table){
+  int itpos335 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction366].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1148]) return;
+  if (init_table[itpos335]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42687;
-  fra.me.meth = LOCATE_parser___ReduceAction1144___init;
+  fra.me.line = 10740;
+  fra.me.meth = LOCATE_parser___ReduceAction366___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42687 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10740 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction366____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1148] = 1;
+  init_table[itpos335] = 1;
   return;
 }
-void parser___ReduceAction1145___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 42691;
-  fra.me.meth = LOCATE_parser___ReduceAction1145___action;
+  fra.me.line = 10744;
+  fra.me.meth = LOCATE_parser___ReduceAction371___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
-  /* ./parser//parser.nit:42696 */
+  /* ./parser//parser.nit:10746 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10747 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10748 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10749 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10750 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10752 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10753 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction371____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42696);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10753);
   }
-  fra.me.REG[2] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction371____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42701 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1145___init(val_t p0, int* init_table){
-  int itpos1149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1145].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction371___init(val_t p0, val_t p1, int* init_table){
+  int itpos336 = 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[itpos1149]) return;
+  if (init_table[itpos336]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42703;
-  fra.me.meth = LOCATE_parser___ReduceAction1145___init;
+  fra.me.line = 10756;
+  fra.me.meth = LOCATE_parser___ReduceAction371___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42703 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10756 */
+  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[itpos1149] = 1;
+  init_table[itpos336] = 1;
   return;
 }
-void parser___ReduceAction1146___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction372___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 = 42707;
-  fra.me.meth = LOCATE_parser___ReduceAction1146___action;
+  fra.me.line = 10760;
+  fra.me.meth = LOCATE_parser___ReduceAction372___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
-  /* ./parser//parser.nit:42712 */
+  /* ./parser//parser.nit:10762 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10763 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10764 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10765 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10766 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10768 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42712);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10768);
   }
-  fra.me.REG[2] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42717 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1146___init(val_t p0, int* init_table){
-  int itpos1150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1146].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1150]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 42719;
-  fra.me.meth = LOCATE_parser___ReduceAction1146___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42719 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1150] = 1;
-  return;
-}
-void parser___ReduceAction1147___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 = 42723;
-  fra.me.meth = LOCATE_parser___ReduceAction1147___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
-  /* ./parser//parser.nit:42728 */
+  /* ./parser//parser.nit:10769 */
+  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:10770 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10771 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction372____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42728);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10771);
   }
-  fra.me.REG[2] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction372____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42733 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1147___init(val_t p0, int* init_table){
-  int itpos1151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1147].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction372___init(val_t p0, val_t p1, int* init_table){
+  int itpos337 = 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[itpos1151]) return;
+  if (init_table[itpos337]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42735;
-  fra.me.meth = LOCATE_parser___ReduceAction1147___init;
+  fra.me.line = 10774;
+  fra.me.meth = LOCATE_parser___ReduceAction372___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42735 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10774 */
+  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[itpos1151] = 1;
+  init_table[itpos337] = 1;
   return;
 }
-void parser___ReduceAction1148___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction373___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 = 42739;
-  fra.me.meth = LOCATE_parser___ReduceAction1148___action;
+  fra.me.line = 10778;
+  fra.me.meth = LOCATE_parser___ReduceAction373___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:42744 */
+  /* ./parser//parser.nit:10780 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10781 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10782 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10784 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42744);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10784);
   }
-  fra.me.REG[2] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42749 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1148___init(val_t p0, int* init_table){
-  int itpos1152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1148].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1152]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 42751;
-  fra.me.meth = LOCATE_parser___ReduceAction1148___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42751 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1152] = 1;
-  return;
-}
-void parser___ReduceAction1149___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 = 42755;
-  fra.me.meth = LOCATE_parser___ReduceAction1149___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
-  /* ./parser//parser.nit:42760 */
+  /* ./parser//parser.nit:10785 */
+  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:10786 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10787 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction373____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42760);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10787);
   }
-  fra.me.REG[2] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction373____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42765 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1149___init(val_t p0, int* init_table){
-  int itpos1153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1149].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction373___init(val_t p0, val_t p1, int* init_table){
+  int itpos338 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction373].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1153]) return;
+  if (init_table[itpos338]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42767;
-  fra.me.meth = LOCATE_parser___ReduceAction1149___init;
+  fra.me.line = 10790;
+  fra.me.meth = LOCATE_parser___ReduceAction373___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42767 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10790 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction373____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1153] = 1;
+  init_table[itpos338] = 1;
   return;
 }
-void parser___ReduceAction1150___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction374___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 = 42771;
-  fra.me.meth = LOCATE_parser___ReduceAction1150___action;
+  fra.me.line = 10794;
+  fra.me.meth = LOCATE_parser___ReduceAction374___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
-  /* ./parser//parser.nit:42776 */
+  /* ./parser//parser.nit:10796 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10797 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10798 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10800 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42776);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[2] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42781 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1150___init(val_t p0, int* init_table){
-  int itpos1154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1150].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1154]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 42783;
-  fra.me.meth = LOCATE_parser___ReduceAction1150___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42783 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1154] = 1;
-  return;
-}
-void parser___ReduceAction1151___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 = 42787;
-  fra.me.meth = LOCATE_parser___ReduceAction1151___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
-  /* ./parser//parser.nit:42792 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:10801 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:10803 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10804 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction374____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42792);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10804);
   }
-  fra.me.REG[2] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction374____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42797 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1151___init(val_t p0, int* init_table){
-  int itpos1155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1151].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction374___init(val_t p0, val_t p1, int* init_table){
+  int itpos339 = 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[itpos1155]) return;
+  if (init_table[itpos339]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42799;
-  fra.me.meth = LOCATE_parser___ReduceAction1151___init;
+  fra.me.line = 10807;
+  fra.me.meth = LOCATE_parser___ReduceAction374___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42799 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10807 */
+  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[itpos1155] = 1;
+  init_table[itpos339] = 1;
   return;
 }
-void parser___ReduceAction1152___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42803;
-  fra.me.meth = LOCATE_parser___ReduceAction1152___action;
+  fra.me.line = 10811;
+  fra.me.meth = LOCATE_parser___ReduceAction375___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast nullable TString*/;
-  /* ./parser//parser.nit:42808 */
+  /* ./parser//parser.nit:10813 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10814 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10815 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10816 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10817 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10818 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10819 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10821 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42808);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10821);
   }
-  fra.me.REG[2] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  /* ./parser//parser.nit:10823 */
+  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:10824 */
+  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));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:10825 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:10827 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:10828 */
+  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, 10828);
+  }
+  REGB0 = ATTR_parser___ReduceAction375____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42813 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1152___init(val_t p0, int* init_table){
-  int itpos1156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1152].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction375___init(val_t p0, val_t p1, int* init_table){
+  int itpos340 = 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[itpos1156]) return;
+  if (init_table[itpos340]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42815;
-  fra.me.meth = LOCATE_parser___ReduceAction1152___init;
+  fra.me.line = 10831;
+  fra.me.meth = LOCATE_parser___ReduceAction375___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42815 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10831 */
+  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[itpos1156] = 1;
+  init_table[itpos340] = 1;
   return;
 }
-void parser___ReduceAction1153___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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 = 42819;
-  fra.me.meth = LOCATE_parser___ReduceAction1153___action;
+  fra.me.line = 10835;
+  fra.me.meth = LOCATE_parser___ReduceAction376___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42824 */
+  /* ./parser//parser.nit:10837 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10838 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10839 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10841 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42824);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10841);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  /* ./parser//parser.nit:10842 */
+  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:10846 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10847 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction376____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10847);
+  }
+  REGB0 = ATTR_parser___ReduceAction376____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42826 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1153___init(val_t p0, int* init_table){
-  int itpos1157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1153].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction376___init(val_t p0, val_t p1, int* init_table){
+  int itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1157]) return;
+  if (init_table[itpos341]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42828;
-  fra.me.meth = LOCATE_parser___ReduceAction1153___init;
+  fra.me.line = 10850;
+  fra.me.meth = LOCATE_parser___ReduceAction376___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42828 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10850 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1157] = 1;
+  init_table[itpos341] = 1;
   return;
 }
-void parser___ReduceAction1154___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction377___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 = 42832;
-  fra.me.meth = LOCATE_parser___ReduceAction1154___action;
+  fra.me.line = 10854;
+  fra.me.meth = LOCATE_parser___ReduceAction377___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10856 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10857 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10858 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42846 */
+  /* ./parser//parser.nit:10859 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10861 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42846);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10861);
   }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
-  /* ./parser//parser.nit:42848 */
+  /* ./parser//parser.nit:10862 */
+  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:10864 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42848);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10864);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:42850 */
+  /* ./parser//parser.nit:10865 */
+  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:10869 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10870 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction377____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42850);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10870);
   }
-  fra.me.REG[2] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction377____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42857 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1154___init(val_t p0, int* init_table){
-  int itpos1158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1154].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction377___init(val_t p0, val_t p1, int* init_table){
+  int itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1158]) return;
+  if (init_table[itpos342]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42859;
-  fra.me.meth = LOCATE_parser___ReduceAction1154___init;
+  fra.me.line = 10873;
+  fra.me.meth = LOCATE_parser___ReduceAction377___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42859 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10873 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1158] = 1;
+  init_table[itpos342] = 1;
   return;
 }
-void parser___ReduceAction1155___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction378___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 = 42863;
-  fra.me.meth = LOCATE_parser___ReduceAction1155___action;
+  fra.me.line = 10877;
+  fra.me.meth = LOCATE_parser___ReduceAction378___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10879 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10880 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  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:42879 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42879);
-    nit_exit(1);
-  }
-  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:42881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42881);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
-  /* ./parser//parser.nit:42883 */
+  /* ./parser//parser.nit:10881 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10883 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42883);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10883);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
-  /* ./parser//parser.nit:42885 */
+  /* ./parser//parser.nit:10884 */
+  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:10885 */
+  fra.me.REG[4] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:10889 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10890 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction378____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42885);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10890);
   }
-  fra.me.REG[2] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(123);
+  REGB0 = ATTR_parser___ReduceAction378____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42893 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1155___init(val_t p0, int* init_table){
-  int itpos1159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1155].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction378___init(val_t p0, val_t p1, int* init_table){
+  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction378].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1159]) return;
+  if (init_table[itpos343]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42895;
-  fra.me.meth = LOCATE_parser___ReduceAction1155___init;
+  fra.me.line = 10893;
+  fra.me.meth = LOCATE_parser___ReduceAction378___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42895 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10893 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction378____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1159] = 1;
+  init_table[itpos343] = 1;
   return;
 }
-void parser___ReduceAction1156___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction379___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 = 42899;
-  fra.me.meth = LOCATE_parser___ReduceAction1156___action;
+  fra.me.line = 10897;
+  fra.me.meth = LOCATE_parser___ReduceAction379___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42906 */
+  /* ./parser//parser.nit:10899 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10900 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10901 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10902 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10904 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10905 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction379____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42906);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10905);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(124);
+  REGB0 = ATTR_parser___ReduceAction379____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42908 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1156___init(val_t p0, int* init_table){
-  int itpos1160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1156].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction379___init(val_t p0, val_t p1, int* init_table){
+  int itpos344 = 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[itpos1160]) return;
+  if (init_table[itpos344]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42910;
-  fra.me.meth = LOCATE_parser___ReduceAction1156___init;
+  fra.me.line = 10908;
+  fra.me.meth = LOCATE_parser___ReduceAction379___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42910 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10908 */
+  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[itpos1160] = 1;
+  init_table[itpos344] = 1;
   return;
 }
-void parser___ReduceAction1157___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction380___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 = 42914;
-  fra.me.meth = LOCATE_parser___ReduceAction1157___action;
+  fra.me.line = 10912;
+  fra.me.meth = LOCATE_parser___ReduceAction380___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(124);
+  /* ./parser//parser.nit:10914 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10915 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10916 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10917 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10919 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10920 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction380____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10920);
+  }
+  REGB0 = ATTR_parser___ReduceAction380____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42920 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1157___init(val_t p0, int* init_table){
-  int itpos1161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1157].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction380___init(val_t p0, val_t p1, int* init_table){
+  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction380].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1161]) return;
+  if (init_table[itpos345]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42922;
-  fra.me.meth = LOCATE_parser___ReduceAction1157___init;
+  fra.me.line = 10923;
+  fra.me.meth = LOCATE_parser___ReduceAction380___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42922 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10923 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction380____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1161] = 1;
+  init_table[itpos345] = 1;
   return;
 }
-void parser___ReduceAction1158___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser___ReduceAction381___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 = 42926;
-  fra.me.meth = LOCATE_parser___ReduceAction1158___action;
+  fra.me.line = 10927;
+  fra.me.meth = LOCATE_parser___ReduceAction381___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:42931 */
+  /* ./parser//parser.nit:10929 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10930 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10931 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction381____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42931);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10931);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(125);
+  REGB0 = ATTR_parser___ReduceAction381____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42933 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1158___init(val_t p0, int* init_table){
-  int itpos1162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1158].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction381___init(val_t p0, val_t p1, int* init_table){
+  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction381].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1162]) return;
+  if (init_table[itpos346]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42935;
-  fra.me.meth = LOCATE_parser___ReduceAction1158___init;
+  fra.me.line = 10934;
+  fra.me.meth = LOCATE_parser___ReduceAction381___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42935 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10934 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction381____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1162] = 1;
+  init_table[itpos346] = 1;
   return;
 }
-void parser___ReduceAction1159___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction383___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 = 42939;
-  fra.me.meth = LOCATE_parser___ReduceAction1159___action;
+  fra.me.line = 10938;
+  fra.me.meth = LOCATE_parser___ReduceAction383___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10940 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:42951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42951);
-    nit_exit(1);
-  }
-  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:42953 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42953);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:10942 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10944 */
   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:42955 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42955);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:42957 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:42958 */
-  } else {
-    /* ./parser//parser.nit:42960 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:42964 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42964);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10944);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:42966 */
+  /* ./parser//parser.nit:10945 */
+  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:10946 */
+  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
+  /* ./parser//parser.nit:10949 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10950 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction383____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:42967 */
   } else {
-    /* ./parser//parser.nit:42969 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10950);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(125);
+  REGB0 = ATTR_parser___ReduceAction383____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:42979 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1159___init(val_t p0, int* init_table){
-  int itpos1163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1159].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction383___init(val_t p0, val_t p1, int* init_table){
+  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction383].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1163]) return;
+  if (init_table[itpos347]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 42981;
-  fra.me.meth = LOCATE_parser___ReduceAction1159___init;
+  fra.me.line = 10953;
+  fra.me.meth = LOCATE_parser___ReduceAction383___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:42981 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10953 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction383____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1163] = 1;
+  init_table[itpos347] = 1;
   return;
 }
-void parser___ReduceAction1160___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction384___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 = 42985;
-  fra.me.meth = LOCATE_parser___ReduceAction1160___action;
+  fra.me.line = 10957;
+  fra.me.meth = LOCATE_parser___ReduceAction384___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10959 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10960 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10961 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:42996 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42996);
-    nit_exit(1);
-  }
+  /* ./parser//parser.nit:10962 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:10964 */
   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:42998 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 42998);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:43000 */
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:43001 */
   } else {
-    /* ./parser//parser.nit:43003 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10964);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:43007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43007);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:43009 */
+  /* ./parser//parser.nit:10965 */
+  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:10966 */
+  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
+  /* ./parser//parser.nit:10969 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:10970 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction384____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:43010 */
   } else {
-    /* ./parser//parser.nit:43012 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10970);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(125);
+  REGB0 = ATTR_parser___ReduceAction384____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43022 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1160___init(val_t p0, int* init_table){
-  int itpos1164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1160].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction384___init(val_t p0, val_t p1, int* init_table){
+  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction384].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1164]) return;
+  if (init_table[itpos348]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43024;
-  fra.me.meth = LOCATE_parser___ReduceAction1160___init;
+  fra.me.line = 10973;
+  fra.me.meth = LOCATE_parser___ReduceAction384___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43024 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10973 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction384____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1164] = 1;
+  init_table[itpos348] = 1;
   return;
 }
-void parser___ReduceAction1161___action(val_t p0, val_t p1){
+void parser___ReduceAction386___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 = 43028;
-  fra.me.meth = LOCATE_parser___ReduceAction1161___action;
+  fra.me.line = 10977;
+  fra.me.meth = LOCATE_parser___ReduceAction386___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -115384,256 +37029,170 @@ void parser___ReduceAction1161___action(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:43033 */
+  /* ./parser//parser.nit:10979 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10980 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10981 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction386____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43033);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10981);
   }
-  fra.me.REG[0] = fra.me.REG[2];
-  REGB0 = TAG_Int(126);
+  REGB0 = ATTR_parser___ReduceAction386____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43035 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1161___init(val_t p0, int* init_table){
-  int itpos1165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1161].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction386___init(val_t p0, val_t p1, int* init_table){
+  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction386].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1165]) return;
+  if (init_table[itpos349]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43037;
-  fra.me.meth = LOCATE_parser___ReduceAction1161___init;
+  fra.me.line = 10984;
+  fra.me.meth = LOCATE_parser___ReduceAction386___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43037 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10984 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction386____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1165] = 1;
+  init_table[itpos349] = 1;
   return;
 }
-void parser___ReduceAction1162___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction387___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 = 43041;
-  fra.me.meth = LOCATE_parser___ReduceAction1162___action;
+  fra.me.line = 10988;
+  fra.me.meth = LOCATE_parser___ReduceAction387___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:10990 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:10991 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  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:43053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43053);
-    nit_exit(1);
-  }
-  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:43055 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43055);
-    nit_exit(1);
-  }
-  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:43057 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43057);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:43059 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:43060 */
-  } else {
-    /* ./parser//parser.nit:43062 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:43066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43066);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser.nit:43068 */
+  /* ./parser//parser.nit:10993 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:10994 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction387____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[7] = fra.me.REG[2];
-  /* ./parser//parser.nit:43069 */
   } else {
-    /* ./parser//parser.nit:43071 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10994);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[7];
-  REGB0 = TAG_Int(126);
+  REGB0 = ATTR_parser___ReduceAction387____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43081 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1162___init(val_t p0, int* init_table){
-  int itpos1166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1162].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction387___init(val_t p0, val_t p1, int* init_table){
+  int itpos350 = 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[itpos1166]) return;
+  if (init_table[itpos350]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43083;
-  fra.me.meth = LOCATE_parser___ReduceAction1162___init;
+  fra.me.line = 10997;
+  fra.me.meth = LOCATE_parser___ReduceAction387___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43083 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:10997 */
+  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[itpos1166] = 1;
+  init_table[itpos350] = 1;
   return;
 }
-void parser___ReduceAction1163___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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 = 43087;
-  fra.me.meth = LOCATE_parser___ReduceAction1163___action;
+  fra.me.line = 11001;
+  fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11003 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  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:43098 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43098);
-    nit_exit(1);
-  }
-  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:43100 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43100);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./parser//parser.nit:43102 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:43103 */
-  } else {
-    /* ./parser//parser.nit:43105 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:43109 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43109);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser.nit:43111 */
+  /* ./parser//parser.nit:11005 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11006 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction388____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[6] = fra.me.REG[2];
-  /* ./parser//parser.nit:43112 */
   } else {
-    /* ./parser//parser.nit:43114 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11006);
   }
-  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]);
-  fra.me.REG[0] = fra.me.REG[6];
-  REGB0 = TAG_Int(126);
+  REGB0 = ATTR_parser___ReduceAction388____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43124 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1163___init(val_t p0, int* init_table){
-  int itpos1167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1163].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction388___init(val_t p0, val_t p1, int* init_table){
+  int itpos351 = 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[itpos1167]) return;
+  if (init_table[itpos351]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43126;
-  fra.me.meth = LOCATE_parser___ReduceAction1163___init;
+  fra.me.line = 11009;
+  fra.me.meth = LOCATE_parser___ReduceAction388___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43126 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11009 */
+  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[itpos1167] = 1;
+  init_table[itpos351] = 1;
   return;
 }
-void parser___ReduceAction1164___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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43130;
-  fra.me.meth = LOCATE_parser___ReduceAction1164___action;
+  fra.me.line = 11013;
+  fra.me.meth = LOCATE_parser___ReduceAction389___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -115642,493 +37201,462 @@ void parser___ReduceAction1164___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AImport, ID_AImport)) /*cast nullable AImport*/;
-  /* ./parser//parser.nit:43136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43136);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43137 */
+  /* ./parser//parser.nit:11015 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11016 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11017 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11018 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11019 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction389____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43138 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11019);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(127);
+  REGB0 = ATTR_parser___ReduceAction389____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43141 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1164___init(val_t p0, int* init_table){
-  int itpos1168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1164].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
+  int itpos352 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction389].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1168]) return;
+  if (init_table[itpos352]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43143;
-  fra.me.meth = LOCATE_parser___ReduceAction1164___init;
+  fra.me.line = 11022;
+  fra.me.meth = LOCATE_parser___ReduceAction389___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43143 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11022 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1168] = 1;
+  init_table[itpos352] = 1;
   return;
 }
-void parser___ReduceAction1165___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction637___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 = 43147;
-  fra.me.meth = LOCATE_parser___ReduceAction1165___action;
+  fra.me.line = 11026;
+  fra.me.meth = LOCATE_parser___ReduceAction637___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11028 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11029 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43154 */
+  /* ./parser//parser.nit:11030 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11031 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11033 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43154);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11033);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AImport, ID_AImport)) /*cast nullable AImport*/;
-  /* ./parser//parser.nit:43156 */
+  /* ./parser//parser.nit:11035 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43156);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11035);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43158 */
+  /* ./parser//parser.nit:11037 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43159 */
   } else {
-    /* ./parser//parser.nit:43161 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11037);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43164 */
+  /* ./parser//parser.nit:11038 */
+  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:11043 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11044 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction637____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43165 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11044);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(127);
+  REGB0 = ATTR_parser___ReduceAction637____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43168 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1165___init(val_t p0, int* init_table){
-  int itpos1169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1165].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction637___init(val_t p0, val_t p1, int* init_table){
+  int itpos353 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction637].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1169]) return;
+  if (init_table[itpos353]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43170;
-  fra.me.meth = LOCATE_parser___ReduceAction1165___init;
+  fra.me.line = 11047;
+  fra.me.meth = LOCATE_parser___ReduceAction637___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43170 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11047 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction637____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1169] = 1;
+  init_table[itpos353] = 1;
   return;
 }
-void parser___ReduceAction1166___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction638___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 = 43174;
-  fra.me.meth = LOCATE_parser___ReduceAction1166___action;
+  fra.me.line = 11051;
+  fra.me.meth = LOCATE_parser___ReduceAction638___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:43180 */
+  /* ./parser//parser.nit:11053 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11054 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11055 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11057 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43180);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11057);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43181 */
+  /* ./parser//parser.nit:11059 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11059);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:11060 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:11064 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11065 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction638____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43182 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11065);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(128);
+  REGB0 = ATTR_parser___ReduceAction638____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43185 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1166___init(val_t p0, int* init_table){
-  int itpos1170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1166].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction638___init(val_t p0, val_t p1, int* init_table){
+  int itpos354 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction638].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1170]) return;
+  if (init_table[itpos354]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43187;
-  fra.me.meth = LOCATE_parser___ReduceAction1166___init;
+  fra.me.line = 11068;
+  fra.me.meth = LOCATE_parser___ReduceAction638___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43187 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11068 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction638____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1170] = 1;
+  init_table[itpos354] = 1;
   return;
 }
-void parser___ReduceAction1167___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction639___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_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 = 43191;
-  fra.me.meth = LOCATE_parser___ReduceAction1167___action;
+  fra.me.line = 11072;
+  fra.me.meth = LOCATE_parser___ReduceAction639___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11074 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11075 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43198 */
+  /* ./parser//parser.nit:11076 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11077 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11078 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11079 */
+  fra.me.REG[7] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11081 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43198);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11081);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
-  /* ./parser//parser.nit:43200 */
+  /* ./parser//parser.nit:11083 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43200);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11083);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43202 */
+  /* ./parser//parser.nit:11085 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43203 */
   } else {
-    /* ./parser//parser.nit:43205 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11085);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43208 */
+  /* ./parser//parser.nit:11086 */
+  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:11087 */
+  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:11093 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:11094 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction639____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43209 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11094);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(128);
+  REGB0 = ATTR_parser___ReduceAction639____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43212 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1167___init(val_t p0, int* init_table){
-  int itpos1171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1167].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction639___init(val_t p0, val_t p1, int* init_table){
+  int itpos355 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction639].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1171]) return;
+  if (init_table[itpos355]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43214;
-  fra.me.meth = LOCATE_parser___ReduceAction1167___init;
+  fra.me.line = 11097;
+  fra.me.meth = LOCATE_parser___ReduceAction639___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43214 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11097 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction639____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1171] = 1;
+  init_table[itpos355] = 1;
   return;
 }
-void parser___ReduceAction1168___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction642___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 = 43218;
-  fra.me.meth = LOCATE_parser___ReduceAction1168___action;
+  fra.me.line = 11101;
+  fra.me.meth = LOCATE_parser___ReduceAction642___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASuperclass, ID_ASuperclass)) /*cast nullable ASuperclass*/;
-  /* ./parser//parser.nit:43224 */
+  /* ./parser//parser.nit:11103 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11104 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11105 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11106 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11107 */
+  fra.me.REG[6] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11109 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43224);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11109);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43225 */
+  /* ./parser//parser.nit:11111 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11111);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:11113 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43226 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11113);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(129);
+  /* ./parser//parser.nit:11114 */
+  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:11115 */
+  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:11120 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:11121 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction642____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11121);
+  }
+  REGB0 = ATTR_parser___ReduceAction642____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43229 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1168___init(val_t p0, int* init_table){
-  int itpos1172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1168].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction642___init(val_t p0, val_t p1, int* init_table){
+  int itpos356 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction642].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1172]) return;
+  if (init_table[itpos356]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43231;
-  fra.me.meth = LOCATE_parser___ReduceAction1168___init;
+  fra.me.line = 11124;
+  fra.me.meth = LOCATE_parser___ReduceAction642___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43231 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11124 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction642____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1172] = 1;
+  init_table[itpos356] = 1;
   return;
 }
-void parser___ReduceAction1169___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction655___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43235;
-  fra.me.meth = LOCATE_parser___ReduceAction1169___action;
+  fra.me.line = 11128;
+  fra.me.meth = LOCATE_parser___ReduceAction655___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11130 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11131 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43242 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43242);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_ASuperclass, ID_ASuperclass)) /*cast nullable ASuperclass*/;
-  /* ./parser//parser.nit:43244 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43244);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43246 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43247 */
-  } else {
-    /* ./parser//parser.nit:43249 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43252 */
+  /* ./parser//parser.nit:11132 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11133 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11135 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11136 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction655____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43253 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11136);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(129);
+  REGB0 = ATTR_parser___ReduceAction655____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43256 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1169___init(val_t p0, int* init_table){
-  int itpos1173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1169].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction655___init(val_t p0, val_t p1, int* init_table){
+  int itpos357 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction655].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1173]) return;
+  if (init_table[itpos357]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43258;
-  fra.me.meth = LOCATE_parser___ReduceAction1169___init;
+  fra.me.line = 11139;
+  fra.me.meth = LOCATE_parser___ReduceAction655___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43258 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11139 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction655____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1173] = 1;
+  init_table[itpos357] = 1;
   return;
 }
-void parser___ReduceAction1170___action(val_t p0, val_t p1){
+void parser___ReduceAction656___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43262;
-  fra.me.meth = LOCATE_parser___ReduceAction1170___action;
+  fra.me.line = 11143;
+  fra.me.meth = LOCATE_parser___ReduceAction656___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -116137,71 +37665,57 @@ void parser___ReduceAction1170___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast nullable AFormaldef*/;
-  /* ./parser//parser.nit:43268 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43268);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43269 */
+  /* ./parser//parser.nit:11145 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11146 */
+  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* ./parser//parser.nit:11148 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:11149 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction656____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11149);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43270 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(130);
+  REGB0 = ATTR_parser___ReduceAction656____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43273 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1170___init(val_t p0, int* init_table){
-  int itpos1174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1170].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction656___init(val_t p0, val_t p1, int* init_table){
+  int itpos358 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction656].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1174]) return;
+  if (init_table[itpos358]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43275;
-  fra.me.meth = LOCATE_parser___ReduceAction1170___init;
+  fra.me.line = 11152;
+  fra.me.meth = LOCATE_parser___ReduceAction656___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43275 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11152 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction656____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1174] = 1;
+  init_table[itpos358] = 1;
   return;
 }
-void parser___ReduceAction1171___action(val_t p0, val_t p1){
+void parser___ReduceAction663___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 = 43279;
-  fra.me.meth = LOCATE_parser___ReduceAction1171___action;
+  fra.me.line = 11156;
+  fra.me.meth = LOCATE_parser___ReduceAction663___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -116211,162 +37725,169 @@ void parser___ReduceAction1171___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11158 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11160 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43286 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43286);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast nullable AFormaldef*/;
-  /* ./parser//parser.nit:43288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43288);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43290 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43291 */
-  } else {
-    /* ./parser//parser.nit:43293 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43296 */
+  /* ./parser//parser.nit:11162 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43297 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11163 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(130);
+  /* ./parser//parser.nit:11165 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11166 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction663____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11166);
+  }
+  REGB0 = ATTR_parser___ReduceAction663____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43300 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1171___init(val_t p0, int* init_table){
-  int itpos1175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1171].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction663___init(val_t p0, val_t p1, int* init_table){
+  int itpos359 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction663].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1175]) return;
+  if (init_table[itpos359]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43302;
-  fra.me.meth = LOCATE_parser___ReduceAction1171___init;
+  fra.me.line = 11169;
+  fra.me.meth = LOCATE_parser___ReduceAction663___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43302 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11169 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction663____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1175] = 1;
+  init_table[itpos359] = 1;
   return;
 }
-void parser___ReduceAction1172___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction664___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 = 43306;
-  fra.me.meth = LOCATE_parser___ReduceAction1172___action;
+  fra.me.line = 11173;
+  fra.me.meth = LOCATE_parser___ReduceAction664___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:43312 */
+  /* ./parser//parser.nit:11175 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11176 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11177 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11178 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11180 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43312);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11180);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43313 */
+  /* ./parser//parser.nit:11182 */
+  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:11183 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43314 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11184 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(131);
+  /* ./parser//parser.nit:11186 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11187 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction664____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11187);
+  }
+  REGB0 = ATTR_parser___ReduceAction664____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43317 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1172___init(val_t p0, int* init_table){
-  int itpos1176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1172].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction664___init(val_t p0, val_t p1, int* init_table){
+  int itpos360 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction664].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1176]) return;
+  if (init_table[itpos360]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43319;
-  fra.me.meth = LOCATE_parser___ReduceAction1172___init;
+  fra.me.line = 11190;
+  fra.me.meth = LOCATE_parser___ReduceAction664___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43319 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11190 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction664____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1176] = 1;
+  init_table[itpos360] = 1;
   return;
 }
-void parser___ReduceAction1173___action(val_t p0, val_t p1){
+void parser___ReduceAction665___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 = 43323;
-  fra.me.meth = LOCATE_parser___ReduceAction1173___action;
+  fra.me.line = 11194;
+  fra.me.meth = LOCATE_parser___ReduceAction665___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -116376,162 +37897,169 @@ void parser___ReduceAction1173___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11196 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11197 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11198 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43330 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43330);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:43332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43332);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43334 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43335 */
-  } else {
-    /* ./parser//parser.nit:43337 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43340 */
+  /* ./parser//parser.nit:11200 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43341 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11201 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(131);
+  /* ./parser//parser.nit:11203 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11204 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction665____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11204);
+  }
+  REGB0 = ATTR_parser___ReduceAction665____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43344 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1173___init(val_t p0, int* init_table){
-  int itpos1177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1173].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction665___init(val_t p0, val_t p1, int* init_table){
+  int itpos361 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction665].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1177]) return;
+  if (init_table[itpos361]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43346;
-  fra.me.meth = LOCATE_parser___ReduceAction1173___init;
+  fra.me.line = 11207;
+  fra.me.meth = LOCATE_parser___ReduceAction665___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43346 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11207 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction665____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1177] = 1;
+  init_table[itpos361] = 1;
   return;
 }
-void parser___ReduceAction1174___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction666___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 = 43350;
-  fra.me.meth = LOCATE_parser___ReduceAction1174___action;
+  fra.me.line = 11211;
+  fra.me.meth = LOCATE_parser___ReduceAction666___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast nullable AParam*/;
-  /* ./parser//parser.nit:43356 */
+  /* ./parser//parser.nit:11213 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11214 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11215 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11216 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11218 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43356);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11218);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43357 */
+  /* ./parser//parser.nit:11220 */
+  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:11221 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43358 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11222 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(132);
+  /* ./parser//parser.nit:11224 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11225 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction666____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11225);
+  }
+  REGB0 = ATTR_parser___ReduceAction666____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43361 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1174___init(val_t p0, int* init_table){
-  int itpos1178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1174].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction666___init(val_t p0, val_t p1, int* init_table){
+  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction666].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1178]) return;
+  if (init_table[itpos362]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43363;
-  fra.me.meth = LOCATE_parser___ReduceAction1174___init;
+  fra.me.line = 11228;
+  fra.me.meth = LOCATE_parser___ReduceAction666___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43363 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11228 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction666____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1178] = 1;
+  init_table[itpos362] = 1;
   return;
 }
-void parser___ReduceAction1175___action(val_t p0, val_t p1){
+void parser___ReduceAction667___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 = 43367;
-  fra.me.meth = LOCATE_parser___ReduceAction1175___action;
+  fra.me.line = 11232;
+  fra.me.meth = LOCATE_parser___ReduceAction667___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -116541,162 +38069,169 @@ void parser___ReduceAction1175___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11234 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11235 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11236 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43374 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43374);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast nullable AParam*/;
-  /* ./parser//parser.nit:43376 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43376);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43378 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43379 */
-  } else {
-    /* ./parser//parser.nit:43381 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43384 */
+  /* ./parser//parser.nit:11238 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43385 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11239 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(132);
+  /* ./parser//parser.nit:11241 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11242 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction667____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11242);
+  }
+  REGB0 = ATTR_parser___ReduceAction667____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43388 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1175___init(val_t p0, int* init_table){
-  int itpos1179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1175].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction667___init(val_t p0, val_t p1, int* init_table){
+  int itpos363 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction667].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1179]) return;
+  if (init_table[itpos363]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43390;
-  fra.me.meth = LOCATE_parser___ReduceAction1175___init;
+  fra.me.line = 11245;
+  fra.me.meth = LOCATE_parser___ReduceAction667___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43390 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11245 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction667____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1179] = 1;
+  init_table[itpos363] = 1;
   return;
 }
-void parser___ReduceAction1176___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction668___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 = 43394;
-  fra.me.meth = LOCATE_parser___ReduceAction1176___action;
+  fra.me.line = 11249;
+  fra.me.meth = LOCATE_parser___ReduceAction668___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast nullable AClosureDecl*/;
-  /* ./parser//parser.nit:43400 */
+  /* ./parser//parser.nit:11251 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11252 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11253 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11254 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11256 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43400);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11256);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43401 */
+  /* ./parser//parser.nit:11258 */
+  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:11259 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43402 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11260 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(133);
+  /* ./parser//parser.nit:11262 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11263 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction668____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11263);
+  }
+  REGB0 = ATTR_parser___ReduceAction668____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43405 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1176___init(val_t p0, int* init_table){
-  int itpos1180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1176].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction668___init(val_t p0, val_t p1, int* init_table){
+  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction668].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1180]) return;
+  if (init_table[itpos364]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43407;
-  fra.me.meth = LOCATE_parser___ReduceAction1176___init;
+  fra.me.line = 11266;
+  fra.me.meth = LOCATE_parser___ReduceAction668___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43407 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11266 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction668____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1180] = 1;
+  init_table[itpos364] = 1;
   return;
 }
-void parser___ReduceAction1177___action(val_t p0, val_t p1){
+void parser___ReduceAction669___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 = 43411;
-  fra.me.meth = LOCATE_parser___ReduceAction1177___action;
+  fra.me.line = 11270;
+  fra.me.meth = LOCATE_parser___ReduceAction669___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -116706,1377 +38241,1375 @@ void parser___ReduceAction1177___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11272 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11273 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11274 */
   fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43418 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43418);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast nullable AClosureDecl*/;
-  /* ./parser//parser.nit:43420 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43420);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43422 */
-  if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43423 */
-  } else {
-    /* ./parser//parser.nit:43425 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43428 */
+  /* ./parser//parser.nit:11276 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43429 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(133);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43432 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction1177___init(val_t p0, int* init_table){
-  int itpos1181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1177].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1181]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 43434;
-  fra.me.meth = LOCATE_parser___ReduceAction1177___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43434 */
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1181] = 1;
-  return;
-}
-void parser___ReduceAction1178___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 43438;
-  fra.me.meth = LOCATE_parser___ReduceAction1178___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;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:43444 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43444);
-    nit_exit(1);
+    /* ./parser//parser.nit:11277 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43445 */
+  /* ./parser//parser.nit:11279 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11280 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction669____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43446 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11280);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(134);
+  REGB0 = ATTR_parser___ReduceAction669____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43449 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1178___init(val_t p0, int* init_table){
-  int itpos1182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1178].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction669___init(val_t p0, val_t p1, int* init_table){
+  int itpos365 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction669].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1182]) return;
+  if (init_table[itpos365]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43451;
-  fra.me.meth = LOCATE_parser___ReduceAction1178___init;
+  fra.me.line = 11283;
+  fra.me.meth = LOCATE_parser___ReduceAction669___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43451 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11283 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction669____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1182] = 1;
+  init_table[itpos365] = 1;
   return;
 }
-void parser___ReduceAction1179___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction670___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 = 43455;
-  fra.me.meth = LOCATE_parser___ReduceAction1179___action;
+  fra.me.line = 11287;
+  fra.me.meth = LOCATE_parser___ReduceAction670___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11289 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11290 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43462 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43462);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  /* ./parser//parser.nit:43464 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43464);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43466 */
+  /* ./parser//parser.nit:11291 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11292 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11294 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43467 */
   } else {
-    /* ./parser//parser.nit:43469 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11294);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43472 */
+  /* ./parser//parser.nit:11296 */
+  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:11297 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43473 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11298 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(134);
+  /* ./parser//parser.nit:11300 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11301 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction670____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11301);
+  }
+  REGB0 = ATTR_parser___ReduceAction670____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43476 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1179___init(val_t p0, int* init_table){
-  int itpos1183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1179].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction670___init(val_t p0, val_t p1, int* init_table){
+  int itpos366 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction670].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1183]) return;
+  if (init_table[itpos366]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43478;
-  fra.me.meth = LOCATE_parser___ReduceAction1179___init;
+  fra.me.line = 11304;
+  fra.me.meth = LOCATE_parser___ReduceAction670___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43478 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11304 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction670____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1183] = 1;
+  init_table[itpos366] = 1;
   return;
 }
-void parser___ReduceAction1180___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction673___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 = 43482;
-  fra.me.meth = LOCATE_parser___ReduceAction1180___action;
+  fra.me.line = 11308;
+  fra.me.meth = LOCATE_parser___ReduceAction673___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:43488 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43488);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43489 */
+  /* ./parser//parser.nit:11310 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11311 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11312 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11314 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43490 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11315 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(135);
+  /* ./parser//parser.nit:11317 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11318 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction673____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11318);
+  }
+  REGB0 = ATTR_parser___ReduceAction673____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43493 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1180___init(val_t p0, int* init_table){
-  int itpos1184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1180].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction673___init(val_t p0, val_t p1, int* init_table){
+  int itpos367 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction673].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1184]) return;
+  if (init_table[itpos367]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43495;
-  fra.me.meth = LOCATE_parser___ReduceAction1180___init;
+  fra.me.line = 11321;
+  fra.me.meth = LOCATE_parser___ReduceAction673___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43495 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11321 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction673____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1184] = 1;
+  init_table[itpos367] = 1;
   return;
 }
-void parser___ReduceAction1181___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction674___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 = 43499;
-  fra.me.meth = LOCATE_parser___ReduceAction1181___action;
+  fra.me.line = 11325;
+  fra.me.meth = LOCATE_parser___ReduceAction674___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11327 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43506 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43506);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:43508 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43508);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43510 */
+  /* ./parser//parser.nit:11329 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11330 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11332 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43511 */
   } else {
-    /* ./parser//parser.nit:43513 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11332);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43516 */
+  /* ./parser//parser.nit:11334 */
+  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:11335 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43517 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11336 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(135);
+  /* ./parser//parser.nit:11338 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11339 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction674____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11339);
+  }
+  REGB0 = ATTR_parser___ReduceAction674____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43520 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1181___init(val_t p0, int* init_table){
-  int itpos1185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1181].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction674___init(val_t p0, val_t p1, int* init_table){
+  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction674].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1185]) return;
+  if (init_table[itpos368]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43522;
-  fra.me.meth = LOCATE_parser___ReduceAction1181___init;
+  fra.me.line = 11342;
+  fra.me.meth = LOCATE_parser___ReduceAction674___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43522 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11342 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction674____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1185] = 1;
+  init_table[itpos368] = 1;
   return;
 }
-void parser___ReduceAction1182___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction675___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 = 43526;
-  fra.me.meth = LOCATE_parser___ReduceAction1182___action;
+  fra.me.line = 11346;
+  fra.me.meth = LOCATE_parser___ReduceAction675___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:43532 */
+  /* ./parser//parser.nit:11348 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11349 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11350 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11352 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43532);
-    nit_exit(1);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:11353 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser.nit:43534 */
+  /* ./parser//parser.nit:11355 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11356 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction675____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[3] = fra.me.REG[2];
-  /* ./parser//parser.nit:43535 */
   } else {
-    /* ./parser//parser.nit:43537 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11356);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(136);
+  REGB0 = ATTR_parser___ReduceAction675____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43541 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1182___init(val_t p0, int* init_table){
-  int itpos1186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1182].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction675___init(val_t p0, val_t p1, int* init_table){
+  int itpos369 = 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[itpos1186]) return;
+  if (init_table[itpos369]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43543;
-  fra.me.meth = LOCATE_parser___ReduceAction1182___init;
+  fra.me.line = 11359;
+  fra.me.meth = LOCATE_parser___ReduceAction675___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43543 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11359 */
+  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[itpos1186] = 1;
+  init_table[itpos369] = 1;
   return;
 }
-void parser___ReduceAction1183___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction676___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 = 43547;
-  fra.me.meth = LOCATE_parser___ReduceAction1183___action;
+  fra.me.line = 11363;
+  fra.me.meth = LOCATE_parser___ReduceAction676___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11365 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43554 */
+  /* ./parser//parser.nit:11367 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11368 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11370 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43554);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11370);
   }
-  REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  /* ./parser//parser.nit:43556 */
+  /* ./parser//parser.nit:11372 */
+  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:11373 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43556);
-    nit_exit(1);
+    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 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43558 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43559 */
-  } else {
-    /* ./parser//parser.nit:43561 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* ./parser//parser.nit:11374 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43565 */
+  /* ./parser//parser.nit:11376 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11377 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction676____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[4] = fra.me.REG[2];
-  /* ./parser//parser.nit:43566 */
   } else {
-    /* ./parser//parser.nit:43568 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11377);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(136);
+  REGB0 = ATTR_parser___ReduceAction676____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43572 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1183___init(val_t p0, int* init_table){
-  int itpos1187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1183].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
+  int itpos370 = 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[itpos1187]) return;
+  if (init_table[itpos370]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43574;
-  fra.me.meth = LOCATE_parser___ReduceAction1183___init;
+  fra.me.line = 11380;
+  fra.me.meth = LOCATE_parser___ReduceAction676___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43574 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11380 */
+  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[itpos1187] = 1;
+  init_table[itpos370] = 1;
   return;
 }
-void parser___ReduceAction1184___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction677___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 = 43578;
-  fra.me.meth = LOCATE_parser___ReduceAction1184___action;
+  fra.me.line = 11384;
+  fra.me.meth = LOCATE_parser___ReduceAction677___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:43584 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43584);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43585 */
+  /* ./parser//parser.nit:11386 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11387 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11388 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11390 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43586 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11391 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(137);
+  /* ./parser//parser.nit:11393 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11394 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction677____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11394);
+  }
+  REGB0 = ATTR_parser___ReduceAction677____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43589 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1184___init(val_t p0, int* init_table){
-  int itpos1188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1184].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction677___init(val_t p0, val_t p1, int* init_table){
+  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction677].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1188]) return;
+  if (init_table[itpos371]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43591;
-  fra.me.meth = LOCATE_parser___ReduceAction1184___init;
+  fra.me.line = 11397;
+  fra.me.meth = LOCATE_parser___ReduceAction677___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43591 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11397 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction677____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1188] = 1;
+  init_table[itpos371] = 1;
   return;
 }
-void parser___ReduceAction1185___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction678___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 = 43595;
-  fra.me.meth = LOCATE_parser___ReduceAction1185___action;
+  fra.me.line = 11401;
+  fra.me.meth = LOCATE_parser___ReduceAction678___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11403 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11404 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43602 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43602);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  /* ./parser//parser.nit:43604 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43604);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43606 */
+  /* ./parser//parser.nit:11405 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11406 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11408 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43607 */
   } else {
-    /* ./parser//parser.nit:43609 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11408);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43612 */
+  /* ./parser//parser.nit:11410 */
+  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:11411 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43613 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11412 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(137);
+  /* ./parser//parser.nit:11414 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11415 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction678____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11415);
+  }
+  REGB0 = ATTR_parser___ReduceAction678____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43616 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1185___init(val_t p0, int* init_table){
-  int itpos1189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1185].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction678___init(val_t p0, val_t p1, int* init_table){
+  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction678].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1189]) return;
+  if (init_table[itpos372]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43618;
-  fra.me.meth = LOCATE_parser___ReduceAction1185___init;
+  fra.me.line = 11418;
+  fra.me.meth = LOCATE_parser___ReduceAction678___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43618 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11418 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction678____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1189] = 1;
+  init_table[itpos372] = 1;
   return;
 }
-void parser___ReduceAction1186___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction680___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 = 43622;
-  fra.me.meth = LOCATE_parser___ReduceAction1186___action;
+  fra.me.line = 11422;
+  fra.me.meth = LOCATE_parser___ReduceAction680___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:43628 */
+  /* ./parser//parser.nit:11424 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11425 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11426 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11427 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11429 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43628);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11429);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43629 */
+  /* ./parser//parser.nit:11431 */
+  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:11432 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43630 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11433 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(138);
+  /* ./parser//parser.nit:11435 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11436 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction680____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11436);
+  }
+  REGB0 = ATTR_parser___ReduceAction680____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43633 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1186___init(val_t p0, int* init_table){
-  int itpos1190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1186].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction680___init(val_t p0, val_t p1, int* init_table){
+  int itpos373 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction680].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1190]) return;
+  if (init_table[itpos373]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43635;
-  fra.me.meth = LOCATE_parser___ReduceAction1186___init;
+  fra.me.line = 11439;
+  fra.me.meth = LOCATE_parser___ReduceAction680___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43635 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11439 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction680____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1190] = 1;
+  init_table[itpos373] = 1;
   return;
 }
-void parser___ReduceAction1187___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction682___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 = 43639;
-  fra.me.meth = LOCATE_parser___ReduceAction1187___action;
+  fra.me.line = 11443;
+  fra.me.meth = LOCATE_parser___ReduceAction682___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11445 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11446 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43646 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43646);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  /* ./parser//parser.nit:43648 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43648);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43650 */
+  /* ./parser//parser.nit:11447 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11448 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11450 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43651 */
   } else {
-    /* ./parser//parser.nit:43653 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11450);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43656 */
+  /* ./parser//parser.nit:11452 */
+  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:11453 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43657 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11454 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(138);
+  /* ./parser//parser.nit:11456 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11457 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction682____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11457);
+  }
+  REGB0 = ATTR_parser___ReduceAction682____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43660 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1187___init(val_t p0, int* init_table){
-  int itpos1191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1187].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction682___init(val_t p0, val_t p1, int* init_table){
+  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction682].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1191]) return;
+  if (init_table[itpos374]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43662;
-  fra.me.meth = LOCATE_parser___ReduceAction1187___init;
+  fra.me.line = 11460;
+  fra.me.meth = LOCATE_parser___ReduceAction682___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43662 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11460 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction682____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1191] = 1;
+  init_table[itpos374] = 1;
   return;
 }
-void parser___ReduceAction1188___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction684___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 = 43666;
-  fra.me.meth = LOCATE_parser___ReduceAction1188___action;
+  fra.me.line = 11464;
+  fra.me.meth = LOCATE_parser___ReduceAction684___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast nullable TComment*/;
-  /* ./parser//parser.nit:43672 */
+  /* ./parser//parser.nit:11466 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11467 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11468 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11469 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11471 */
+  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 {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43672);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11471);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43673 */
+  /* ./parser//parser.nit:11473 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11473);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:11474 */
+  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:11475 */
+  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:11476 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11477 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction684____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43674 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11477);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(139);
+  REGB0 = ATTR_parser___ReduceAction684____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43677 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1188___init(val_t p0, int* init_table){
-  int itpos1192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1188].i;
-  struct {struct stack_frame_t me;} fra;
+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[itpos1192]) return;
+  if (init_table[itpos375]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43679;
-  fra.me.meth = LOCATE_parser___ReduceAction1188___init;
+  fra.me.line = 11480;
+  fra.me.meth = LOCATE_parser___ReduceAction684___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43679 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11480 */
+  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[itpos1192] = 1;
+  init_table[itpos375] = 1;
   return;
 }
-void parser___ReduceAction1189___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction688___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 = 43683;
-  fra.me.meth = LOCATE_parser___ReduceAction1189___action;
+  fra.me.line = 11484;
+  fra.me.meth = LOCATE_parser___ReduceAction688___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11486 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11487 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43690);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast nullable TComment*/;
-  /* ./parser//parser.nit:43692 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43692);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43694 */
+  /* ./parser//parser.nit:11488 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11489 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11491 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43695 */
   } else {
-    /* ./parser//parser.nit:43697 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11491);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43700 */
+  /* ./parser//parser.nit:11493 */
+  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:11494 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43701 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11495 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(139);
+  /* ./parser//parser.nit:11497 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11498 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction688____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11498);
+  }
+  REGB0 = ATTR_parser___ReduceAction688____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43704 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1189___init(val_t p0, int* init_table){
-  int itpos1193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1189].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
+  int itpos376 = 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[itpos1193]) return;
+  if (init_table[itpos376]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43706;
-  fra.me.meth = LOCATE_parser___ReduceAction1189___init;
+  fra.me.line = 11501;
+  fra.me.meth = LOCATE_parser___ReduceAction688___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43706 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11501 */
+  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[itpos1193] = 1;
+  init_table[itpos376] = 1;
   return;
 }
-void parser___ReduceAction1190___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction689___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 = 43710;
-  fra.me.meth = LOCATE_parser___ReduceAction1190___action;
+  fra.me.line = 11505;
+  fra.me.meth = LOCATE_parser___ReduceAction689___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TEol, ID_TEol)) /*cast nullable TEol*/;
-  /* ./parser//parser.nit:43716 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43716);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43717 */
+  /* ./parser//parser.nit:11507 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11508 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11509 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11511 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43718 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11512 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(140);
+  /* ./parser//parser.nit:11514 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11515 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction689____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11515);
+  }
+  REGB0 = ATTR_parser___ReduceAction689____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43721 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1190___init(val_t p0, int* init_table){
-  int itpos1194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1190].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
+  int itpos377 = 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[itpos1194]) return;
+  if (init_table[itpos377]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43723;
-  fra.me.meth = LOCATE_parser___ReduceAction1190___init;
+  fra.me.line = 11518;
+  fra.me.meth = LOCATE_parser___ReduceAction689___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43723 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11518 */
+  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[itpos1194] = 1;
+  init_table[itpos377] = 1;
   return;
 }
-void parser___ReduceAction1191___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction690___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 = 43727;
-  fra.me.meth = LOCATE_parser___ReduceAction1191___action;
+  fra.me.line = 11522;
+  fra.me.meth = LOCATE_parser___ReduceAction690___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11524 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11525 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43734 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43734);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_TEol, ID_TEol)) /*cast nullable TEol*/;
-  /* ./parser//parser.nit:43736 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43736);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43738 */
+  /* ./parser//parser.nit:11526 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11527 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11529 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43739 */
   } else {
-    /* ./parser//parser.nit:43741 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11529);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43744 */
+  /* ./parser//parser.nit:11531 */
+  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:11532 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43745 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11533 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(140);
+  /* ./parser//parser.nit:11535 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11536 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction690____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11536);
+  }
+  REGB0 = ATTR_parser___ReduceAction690____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43748 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1191___init(val_t p0, int* init_table){
-  int itpos1195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1191].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
+  int itpos378 = 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[itpos1195]) return;
+  if (init_table[itpos378]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43750;
-  fra.me.meth = LOCATE_parser___ReduceAction1191___init;
+  fra.me.line = 11539;
+  fra.me.meth = LOCATE_parser___ReduceAction690___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43750 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11539 */
+  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;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1195] = 1;
+  init_table[itpos378] = 1;
   return;
 }
-void parser___ReduceAction1192___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction691___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 = 43754;
-  fra.me.meth = LOCATE_parser___ReduceAction1192___action;
+  fra.me.line = 11543;
+  fra.me.meth = LOCATE_parser___ReduceAction691___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:43760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43760);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43761 */
+  /* ./parser//parser.nit:11545 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11546 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11547 */
+  fra.me.REG[4] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11549 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43762 */
-    array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+    /* ./parser//parser.nit:11550 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[3];
-  REGB0 = TAG_Int(141);
+  /* ./parser//parser.nit:11552 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:11553 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction691____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11553);
+  }
+  REGB0 = ATTR_parser___ReduceAction691____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43765 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1192___init(val_t p0, int* init_table){
-  int itpos1196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1192].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction691___init(val_t p0, val_t p1, int* init_table){
+  int itpos379 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction691].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1196]) return;
+  if (init_table[itpos379]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43767;
-  fra.me.meth = LOCATE_parser___ReduceAction1192___init;
+  fra.me.line = 11556;
+  fra.me.meth = LOCATE_parser___ReduceAction691___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43767 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11556 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction691____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1196] = 1;
+  init_table[itpos379] = 1;
   return;
 }
-void parser___ReduceAction1193___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction692___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 = 43771;
-  fra.me.meth = LOCATE_parser___ReduceAction1193___action;
+  fra.me.line = 11560;
+  fra.me.meth = LOCATE_parser___ReduceAction692___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[2] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11562 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:11563 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  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:43778 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43778);
-    nit_exit(1);
-  }
-  REGB0 = TAG_Bool((fra.me.REG[2]==NIT_NULL) || VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
-  /* ./parser//parser.nit:43780 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser, 43780);
-    nit_exit(1);
-  }
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser.nit:43782 */
+  /* ./parser//parser.nit:11564 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:11565 */
+  fra.me.REG[5] = NEW_Array_array___Array___init();
+  /* ./parser//parser.nit:11567 */
+  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)) {
-    fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:43783 */
   } else {
-    /* ./parser//parser.nit:43785 */
-    CALL_abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11567);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser.nit:43788 */
+  /* ./parser//parser.nit:11569 */
+  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:11570 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:43789 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+    /* ./parser//parser.nit:11571 */
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  fra.me.REG[0] = fra.me.REG[4];
-  REGB0 = TAG_Int(141);
+  /* ./parser//parser.nit:11573 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:11574 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction692____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11574);
+  }
+  REGB0 = ATTR_parser___ReduceAction692____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* ./parser//parser.nit:43792 */
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[0]);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1193___init(val_t p0, int* init_table){
-  int itpos1197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1193].i;
-  struct {struct stack_frame_t me;} fra;
+void parser___ReduceAction692___init(val_t p0, val_t p1, int* init_table){
+  int itpos380 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction692].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos1197]) return;
+  if (init_table[itpos380]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 43794;
-  fra.me.meth = LOCATE_parser___ReduceAction1193___init;
+  fra.me.line = 11577;
+  fra.me.meth = LOCATE_parser___ReduceAction692___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:43794 */
+  REGB0 = p1;
+  /* ./parser//parser.nit:11577 */
+  fra.me.REG[1] = fra.me.REG[0];
   CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  ATTR_parser___ReduceAction692____goto(fra.me.REG[1]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1197] = 1;
+  init_table[itpos380] = 1;
   return;
 }