c_src: update
[nit.git] / c_src / parser._sep.c
index d0b225c..4d9ca08 100644 (file)
@@ -122,7 +122,7 @@ void parser___Parser___init(val_t p0, val_t p1, int* init_table){
   ATTR_parser___Parser____stack(fra.me.REG[0]) = fra.me.REG[1];
   /* ./parser//parser.nit:38 */
   REGB0 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:219 */
+  /* ./../lib/standard//kernel.nit:236 */
   REGB0 = TAG_Int(-UNTAG_Int(REGB0));
   /* ./parser//parser.nit:38 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB0;
@@ -160,7 +160,7 @@ val_t parser___Parser___go_to(val_t p0, val_t p1){
   REGB3 = TAG_Int(0);
   REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
   REGB4 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:220 */
+  /* ./../lib/standard//kernel.nit:237 */
   REGB4 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB4));
   /* ./parser//parser.nit:49 */
   while(1) {
@@ -169,23 +169,23 @@ val_t parser___Parser___go_to(val_t p0, val_t p1){
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ./../lib/standard//kernel.nit:214 */
+    /* ./../lib/standard//kernel.nit:231 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB2)<=UNTAG_Int(REGB4));
     /* ./parser//parser.nit:49 */
     if (UNTAG_Bool(REGB3)) {
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ./../lib/standard//kernel.nit:235 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB4));
       /* ./parser//parser.nit:50 */
       REGB5 = TAG_Int(2);
-      /* ./../lib/standard//kernel.nit:222 */
+      /* ./../lib/standard//kernel.nit:239 */
       REGB5 = TAG_Int(UNTAG_Int(REGB3)/UNTAG_Int(REGB5));
       /* ./parser//parser.nit:51 */
       REGB3 = TAG_Int(2);
-      /* ./../lib/standard//kernel.nit:221 */
+      /* ./../lib/standard//kernel.nit:238 */
       REGB3 = TAG_Int(UNTAG_Int(REGB5)*UNTAG_Int(REGB3));
       /* ./parser//parser.nit:51 */
       REGB6 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ./../lib/standard//kernel.nit:235 */
       REGB6 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB6));
       /* ./parser//parser.nit:53 */
       REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB6);
@@ -194,13 +194,13 @@ val_t parser___Parser___go_to(val_t p0, val_t p1){
       } else {
         nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
       }
-      /* ./../lib/standard//kernel.nit:215 */
+      /* ./../lib/standard//kernel.nit:232 */
       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:220 */
+        /* ./../lib/standard//kernel.nit:237 */
         REGB7 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB7));
         /* ./parser//parser.nit:55 */
         REGB4 = REGB7;
@@ -210,20 +210,20 @@ val_t parser___Parser___go_to(val_t p0, val_t p1){
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ./../lib/standard//kernel.nit:217 */
+        /* ./../lib/standard//kernel.nit:234 */
         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:218 */
+          /* ./../lib/standard//kernel.nit:235 */
           REGB3 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB3));
           /* ./parser//parser.nit:57 */
           REGB2 = REGB3;
         } else {
           /* ./parser//parser.nit:59 */
           REGB3 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:218 */
+          /* ./../lib/standard//kernel.nit:235 */
           REGB3 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB3));
           /* ./parser//parser.nit:59 */
           REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
@@ -272,7 +272,7 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   }
   REGB1 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB2 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:218 */
+  /* ./../lib/standard//kernel.nit:235 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
   /* ./parser//parser.nit:70 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB2;
@@ -283,11 +283,11 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
     nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 71);
   }
   fra.me.REG[2] = ATTR_parser___Parser____stack(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:23 */
+  /* ./../lib/standard//collection//array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 23);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
   REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -295,7 +295,7 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
   }
-  /* ./../lib/standard//kernel.nit:215 */
+  /* ./../lib/standard//kernel.nit:232 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
   /* ./parser//parser.nit:71 */
   if (UNTAG_Bool(REGB1)) {
@@ -306,21 +306,21 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
       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:243 */
+    /* ./../lib/standard//collection//array.nit:280 */
     REGB1 = TAG_Int(0);
     REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB3)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ./../lib/standard//kernel.nit:216 */
+    /* ./../lib/standard//kernel.nit:233 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB1));
-    /* ./../lib/standard//collection//array.nit:243 */
+    /* ./../lib/standard//collection//array.nit:280 */
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 243);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
       }
       REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
       REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -328,26 +328,26 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
       } else {
         nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
       }
-      /* ./../lib/standard//kernel.nit:215 */
+      /* ./../lib/standard//kernel.nit:232 */
       REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
     } else {
-      /* ./../lib/standard//collection//array.nit:243 */
+      /* ./../lib/standard//collection//array.nit:280 */
       REGB3 = TAG_Bool(false);
       REGB1 = REGB3;
     }
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 243);
+      nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 280);
     }
-    /* ./../lib/standard//collection//array.nit:244 */
+    /* ./../lib/standard//collection//array.nit:281 */
     fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 244);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ./../lib/standard//collection//array.nit:652 */
+    /* ./../lib/standard//collection//array.nit:718 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
-    /* ./../lib/standard//collection//array.nit:244 */
+    /* ./../lib/standard//collection//array.nit:281 */
     goto label1;
     label1: while(0);
     /* ./parser//parser.nit:73 */
@@ -396,21 +396,21 @@ val_t parser___Parser___state(val_t p0){
     nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 83);
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:243 */
+  /* ./../lib/standard//collection//array.nit:280 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
   }
-  /* ./../lib/standard//kernel.nit:216 */
+  /* ./../lib/standard//kernel.nit:233 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:243 */
+  /* ./../lib/standard//collection//array.nit:280 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 243);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
     }
     REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -418,26 +418,26 @@ val_t parser___Parser___state(val_t p0){
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ./../lib/standard//kernel.nit:215 */
+    /* ./../lib/standard//kernel.nit:232 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
   } else {
-    /* ./../lib/standard//collection//array.nit:243 */
+    /* ./../lib/standard//collection//array.nit:280 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 243);
+    nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 280);
   }
-  /* ./../lib/standard//collection//array.nit:244 */
+  /* ./../lib/standard//collection//array.nit:281 */
   fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 244);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ./../lib/standard//collection//array.nit:652 */
+  /* ./../lib/standard//collection//array.nit:718 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:244 */
+  /* ./../lib/standard//collection//array.nit:281 */
   goto label1;
   label1: while(0);
   /* ./parser//parser.nit:83 */
@@ -479,21 +479,21 @@ val_t parser___Parser___pop(val_t p0){
     nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 89);
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:243 */
+  /* ./../lib/standard//collection//array.nit:280 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
   }
-  /* ./../lib/standard//kernel.nit:216 */
+  /* ./../lib/standard//kernel.nit:233 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:243 */
+  /* ./../lib/standard//collection//array.nit:280 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 243);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
     }
     REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -501,26 +501,26 @@ val_t parser___Parser___pop(val_t p0){
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ./../lib/standard//kernel.nit:215 */
+    /* ./../lib/standard//kernel.nit:232 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
   } else {
-    /* ./../lib/standard//collection//array.nit:243 */
+    /* ./../lib/standard//collection//array.nit:280 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 243);
+    nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 280);
   }
-  /* ./../lib/standard//collection//array.nit:244 */
+  /* ./../lib/standard//collection//array.nit:281 */
   fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 244);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ./../lib/standard//collection//array.nit:652 */
+  /* ./../lib/standard//collection//array.nit:718 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:244 */
+  /* ./../lib/standard//collection//array.nit:281 */
   goto label1;
   label1: while(0);
   /* ./parser//parser.nit:89 */
@@ -537,7 +537,7 @@ val_t parser___Parser___pop(val_t p0){
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:220 */
+  /* ./../lib/standard//kernel.nit:237 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
   /* ./parser//parser.nit:90 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB1;
@@ -611,7 +611,7 @@ val_t parser___Parser___parse(val_t p0){
     REGB5 = TAG_Int(0);
     REGB5 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB4, REGB5);
     REGB4 = TAG_Int(1);
-    /* ./../lib/standard//kernel.nit:220 */
+    /* ./../lib/standard//kernel.nit:237 */
     REGB4 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB4));
     /* ./parser//parser.nit:113 */
     while(1) {
@@ -620,23 +620,23 @@ val_t parser___Parser___parse(val_t p0){
       } else {
         nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
       }
-      /* ./../lib/standard//kernel.nit:214 */
+      /* ./../lib/standard//kernel.nit:231 */
       REGB5 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB4));
       /* ./parser//parser.nit:113 */
       if (UNTAG_Bool(REGB5)) {
-        /* ./../lib/standard//kernel.nit:218 */
+        /* ./../lib/standard//kernel.nit:235 */
         REGB5 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB4));
         /* ./parser//parser.nit:114 */
         REGB6 = TAG_Int(2);
-        /* ./../lib/standard//kernel.nit:222 */
+        /* ./../lib/standard//kernel.nit:239 */
         REGB6 = TAG_Int(UNTAG_Int(REGB5)/UNTAG_Int(REGB6));
         /* ./parser//parser.nit:115 */
         REGB5 = TAG_Int(3);
-        /* ./../lib/standard//kernel.nit:221 */
+        /* ./../lib/standard//kernel.nit:238 */
         REGB5 = TAG_Int(UNTAG_Int(REGB6)*UNTAG_Int(REGB5));
         /* ./parser//parser.nit:115 */
         REGB7 = TAG_Int(1);
-        /* ./../lib/standard//kernel.nit:218 */
+        /* ./../lib/standard//kernel.nit:235 */
         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]);
@@ -646,13 +646,13 @@ val_t parser___Parser___parse(val_t p0){
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ./../lib/standard//kernel.nit:215 */
+        /* ./../lib/standard//kernel.nit:232 */
         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:220 */
+          /* ./../lib/standard//kernel.nit:237 */
           REGB8 = TAG_Int(UNTAG_Int(REGB6)-UNTAG_Int(REGB8));
           /* ./parser//parser.nit:119 */
           REGB4 = REGB8;
@@ -662,13 +662,13 @@ val_t parser___Parser___parse(val_t p0){
           } else {
             nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
           }
-          /* ./../lib/standard//kernel.nit:217 */
+          /* ./../lib/standard//kernel.nit:234 */
           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:218 */
+            /* ./../lib/standard//kernel.nit:235 */
             REGB5 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB5));
             /* ./parser//parser.nit:121 */
             REGB1 = REGB5;
@@ -676,7 +676,7 @@ val_t parser___Parser___parse(val_t p0){
             /* ./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:218 */
+            /* ./../lib/standard//kernel.nit:235 */
             REGB6 = TAG_Int(UNTAG_Int(REGB7)+UNTAG_Int(REGB6));
             /* ./parser//parser.nit:123 */
             REGB6 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB6);
@@ -684,7 +684,7 @@ val_t parser___Parser___parse(val_t p0){
             /* ./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:218 */
+            /* ./../lib/standard//kernel.nit:235 */
             REGB5 = TAG_Int(UNTAG_Int(REGB7)+UNTAG_Int(REGB5));
             /* ./parser//parser.nit:124 */
             REGB5 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB6, REGB5);
@@ -704,7 +704,7 @@ val_t parser___Parser___parse(val_t p0){
     REGB0 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* ./../lib/standard//kernel.nit:210 */
+      /* ./../lib/standard//kernel.nit:227 */
       REGB1 = TAG_Bool((REGB2)==(REGB1));
       /* ./parser//parser.nit:129 */
       REGB0 = REGB1;
@@ -719,7 +719,7 @@ val_t parser___Parser___parse(val_t p0){
       REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB0));
       if (UNTAG_Bool(REGB1)) {
       } else {
-        /* ./../lib/standard//kernel.nit:210 */
+        /* ./../lib/standard//kernel.nit:227 */
         REGB0 = TAG_Bool((REGB2)==(REGB0));
         /* ./parser//parser.nit:131 */
         REGB1 = REGB0;
@@ -732,21 +732,21 @@ val_t parser___Parser___parse(val_t p0){
           nit_abort("Uninitialized attribute %s", "_reduce_table", LOCATE_parser, 132);
         }
         fra.me.REG[4] = ATTR_parser___Parser____reduce_table(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:243 */
+        /* ./../lib/standard//collection//array.nit:280 */
         REGB1 = TAG_Int(0);
         REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB0)) {
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ./../lib/standard//kernel.nit:216 */
+        /* ./../lib/standard//kernel.nit:233 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB3)>=UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:243 */
+        /* ./../lib/standard//collection//array.nit:280 */
         if (UNTAG_Bool(REGB1)) {
           REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 243);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
           }
           REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
           REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
@@ -754,26 +754,26 @@ val_t parser___Parser___parse(val_t p0){
           } else {
             nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
           }
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ./../lib/standard//kernel.nit:232 */
           REGB1 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB1));
         } else {
-          /* ./../lib/standard//collection//array.nit:243 */
+          /* ./../lib/standard//collection//array.nit:280 */
           REGB0 = TAG_Bool(false);
           REGB1 = REGB0;
         }
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 243);
+          nit_abort("Assert %s  failed", "'index'", LOCATE_standard___collection___array, 280);
         }
-        /* ./../lib/standard//collection//array.nit:244 */
+        /* ./../lib/standard//collection//array.nit:281 */
         fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
         REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
-          nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 244);
+          nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ./../lib/standard//collection//array.nit:652 */
+        /* ./../lib/standard//collection//array.nit:718 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
-        /* ./../lib/standard//collection//array.nit:244 */
+        /* ./../lib/standard//collection//array.nit:281 */
         goto label3;
         label3: while(0);
         /* ./parser//parser.nit:132 */
@@ -788,7 +788,7 @@ val_t parser___Parser___parse(val_t p0){
         REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
         if (UNTAG_Bool(REGB1)) {
         } else {
-          /* ./../lib/standard//kernel.nit:210 */
+          /* ./../lib/standard//kernel.nit:227 */
           REGB3 = TAG_Bool((REGB2)==(REGB3));
           /* ./parser//parser.nit:133 */
           REGB1 = REGB3;
@@ -824,7 +824,7 @@ val_t parser___Parser___parse(val_t p0){
           REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
           if (UNTAG_Bool(REGB3)) {
           } else {
-            /* ./../lib/standard//kernel.nit:210 */
+            /* ./../lib/standard//kernel.nit:227 */
             REGB1 = TAG_Bool((REGB2)==(REGB1));
             /* ./parser//parser.nit:141 */
             REGB3 = REGB1;
@@ -870,7 +870,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   /* ./parser//parser.nit:152 */
-  REGB0 = TAG_Int(706);
+  REGB0 = TAG_Int(745);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   /* ./parser//parser.nit:153 */
   REGB0 = TAG_Int(0);
@@ -1168,7 +1168,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:212 */
-  REGB0 = TAG_Int(7);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction59_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1178,12 +1178,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:214 */
-  REGB0 = TAG_Int(8);
+  REGB0 = TAG_Int(7);
   fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:215 */
-  REGB0 = TAG_Int(9);
+  REGB0 = TAG_Int(8);
   fra.me.REG[2] = NEW_ReduceAction62_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1193,7 +1193,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:217 */
-  REGB0 = TAG_Int(10);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction64_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1203,12 +1203,12 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:219 */
-  REGB0 = TAG_Int(11);
+  REGB0 = TAG_Int(10);
   fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:220 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(11);
   fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1568,497 +1568,497 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:292 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:293 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:294 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:295 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:296 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:297 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:298 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:299 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:300 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:301 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:302 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:303 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:304 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:305 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:306 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:307 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:308 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:309 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:310 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:311 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:312 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:313 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:314 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:315 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(14);
   fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:316 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(14);
   fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:317 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:318 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction165_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:319 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction166_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:320 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:321 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:322 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:323 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:324 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:325 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:326 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:327 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:328 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:329 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:330 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:331 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:332 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:333 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:334 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:335 */
-  REGB0 = TAG_Int(21);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:336 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:337 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:338 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:339 */
-  REGB0 = TAG_Int(23);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:340 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:341 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:342 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:343 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:344 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:345 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction192_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:346 */
-  REGB0 = TAG_Int(25);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:347 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:348 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:349 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:350 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:351 */
-  REGB0 = TAG_Int(27);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:352 */
-  REGB0 = TAG_Int(27);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:353 */
-  REGB0 = TAG_Int(28);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:354 */
-  REGB0 = TAG_Int(29);
-  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:355 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:356 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:357 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:358 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:359 */
-  REGB0 = TAG_Int(31);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:360 */
-  REGB0 = TAG_Int(31);
+  REGB0 = TAG_Int(23);
   fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:361 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:362 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:363 */
-  REGB0 = TAG_Int(33);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:364 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:365 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(24);
+  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:366 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:367 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(25);
   fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:368 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:369 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:370 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(27);
   fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:371 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(28);
   fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:372 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(28);
+  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:373 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(28);
   fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:374 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:375 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:376 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:377 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction224_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:378 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction225_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:379 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:380 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:381 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction228_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:382 */
-  REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:383 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:384 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:385 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:386 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(33);
   fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:387 */
   REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:388 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:389 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:390 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2088,67 +2088,67 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:396 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(38);
   fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:397 */
-  REGB0 = TAG_Int(37);
-  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:398 */
-  REGB0 = TAG_Int(37);
-  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:399 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:400 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:401 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:402 */
-  REGB0 = TAG_Int(37);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:403 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:404 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:405 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:406 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:407 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:408 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2159,432 +2159,432 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:410 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:411 */
-  REGB0 = TAG_Int(40);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:412 */
-  REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:413 */
-  REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction___init(REGB0);
-  /* ./parser//parser.nit:152 */
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:414 */
-  REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:415 */
-  REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:416 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:417 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:418 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:419 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:420 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:421 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:422 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:423 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(39);
   fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:424 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(40);
   fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:425 */
-  REGB0 = TAG_Int(42);
+  REGB0 = TAG_Int(41);
   fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:426 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(41);
   fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:427 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:428 */
-  REGB0 = TAG_Int(44);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:429 */
-  REGB0 = TAG_Int(44);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:430 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:431 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:432 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:433 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:434 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:435 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(42);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:436 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:437 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:438 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:439 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:440 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:441 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:442 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(44);
   fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:443 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(44);
   fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:444 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:445 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:446 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:447 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction294_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:448 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:449 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:450 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:451 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:452 */
-  REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:453 */
-  REGB0 = TAG_Int(52);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:454 */
-  REGB0 = TAG_Int(53);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:455 */
-  REGB0 = TAG_Int(53);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:456 */
-  REGB0 = TAG_Int(54);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(47);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:457 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:458 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:459 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:460 */
-  REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:461 */
-  REGB0 = TAG_Int(55);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:462 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(49);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:463 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:464 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:465 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:466 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:467 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:468 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:469 */
-  REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:470 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:471 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:472 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:473 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:474 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:475 */
-  REGB0 = TAG_Int(57);
+  REGB0 = TAG_Int(54);
   fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:476 */
-  REGB0 = TAG_Int(57);
+  REGB0 = TAG_Int(54);
   fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:477 */
-  REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(54);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:478 */
-  REGB0 = TAG_Int(58);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:479 */
-  REGB0 = TAG_Int(58);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:480 */
-  REGB0 = TAG_Int(58);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:481 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(55);
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:482 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(56);
   fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:483 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:484 */
-  REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:485 */
-  REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:486 */
-  REGB0 = TAG_Int(60);
+  REGB0 = TAG_Int(57);
   fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:487 */
-  REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:488 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(58);
   fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:489 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:490 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:491 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:492 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:493 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:494 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:495 */
   REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:496 */
@@ -2643,47 +2643,47 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:507 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:508 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(62);
   fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:509 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:510 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:511 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(63);
   fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:512 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(63);
   fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:513 */
-  REGB0 = TAG_Int(62);
+  REGB0 = TAG_Int(63);
   fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:514 */
-  REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(64);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:515 */
-  REGB0 = TAG_Int(63);
+  REGB0 = TAG_Int(64);
   fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2694,1719 +2694,1914 @@ void parser___Parser___build_reduce_table(val_t p0){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:517 */
   REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:518 */
-  REGB0 = TAG_Int(66);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:519 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:520 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:521 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:522 */
-  REGB0 = TAG_Int(68);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:523 */
-  REGB0 = TAG_Int(68);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:524 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:525 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:526 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:527 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:528 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:529 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:530 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:531 */
-  REGB0 = TAG_Int(71);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:532 */
-  REGB0 = TAG_Int(72);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:533 */
-  REGB0 = TAG_Int(72);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:534 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:535 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:536 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:537 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:538 */
-  REGB0 = TAG_Int(74);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:539 */
-  REGB0 = TAG_Int(74);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:540 */
-  REGB0 = TAG_Int(74);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:541 */
-  REGB0 = TAG_Int(75);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:542 */
-  REGB0 = TAG_Int(76);
-  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:543 */
-  REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:544 */
-  REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:545 */
-  REGB0 = TAG_Int(78);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:546 */
-  REGB0 = TAG_Int(78);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:547 */
-  REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:548 */
-  REGB0 = TAG_Int(79);
+  REGB0 = TAG_Int(68);
   fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:549 */
-  REGB0 = TAG_Int(79);
+  REGB0 = TAG_Int(69);
   fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:550 */
-  REGB0 = TAG_Int(80);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:551 */
-  REGB0 = TAG_Int(80);
+  REGB0 = TAG_Int(71);
   fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:552 */
-  REGB0 = TAG_Int(80);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:553 */
-  REGB0 = TAG_Int(81);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:554 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:555 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:556 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:557 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:558 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:559 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:560 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:561 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:562 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:563 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:564 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(76);
+  fra.me.REG[2] = NEW_ReduceAction411_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:565 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(77);
+  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:566 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(77);
+  fra.me.REG[2] = NEW_ReduceAction413_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:567 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction414_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:568 */
-  REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction415_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:569 */
-  REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:570 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:571 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:572 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:573 */
-  REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction420_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:574 */
-  REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction421_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:575 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(81);
+  fra.me.REG[2] = NEW_ReduceAction422_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:576 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:577 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:578 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction425_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:579 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction426_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:580 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:581 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction428_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:582 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:583 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:584 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:585 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:586 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:587 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:588 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:589 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:590 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:591 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:592 */
-  REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:593 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:594 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:595 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:596 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:597 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:598 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:599 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:600 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:601 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:602 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:603 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:604 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:605 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:606 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction228_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:607 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:608 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:609 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:610 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:611 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:612 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:613 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:614 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:615 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:616 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:617 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:618 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:619 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:620 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:621 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:622 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:623 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:624 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:625 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:626 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:627 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:628 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:629 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:630 */
   REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:631 */
   REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:632 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:633 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:634 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:635 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:636 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:637 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:638 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:639 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:640 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:641 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:642 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:643 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:644 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:645 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:646 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:647 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:648 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:649 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:650 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:651 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:652 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:653 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:654 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:655 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:656 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:657 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:658 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:659 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:660 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:661 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:662 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:663 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:664 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:665 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:666 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:667 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:668 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:669 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:670 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:671 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:672 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:673 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:674 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:675 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:676 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:677 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:678 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:679 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:680 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:681 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:682 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:683 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:684 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:685 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:686 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:687 */
-  REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:688 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:689 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:690 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:691 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:692 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:693 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:694 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:695 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:696 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:697 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:698 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:699 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:700 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:701 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:702 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:703 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:704 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:705 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:706 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:707 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(104);
+  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:708 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:709 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:710 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction294_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:711 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:712 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:713 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:714 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:715 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:716 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:717 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:718 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:719 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:720 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:721 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:722 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:723 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:724 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:725 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:726 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:727 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:728 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:729 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:730 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:731 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:732 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:733 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:734 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:735 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:736 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:737 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:738 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:739 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:740 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:741 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:742 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:743 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:744 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:745 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:746 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:747 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:748 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:749 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:750 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:751 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:752 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:753 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:754 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:755 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:756 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:757 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:758 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:759 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:760 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:761 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:762 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:763 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:764 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:765 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:766 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:767 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:768 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:769 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:770 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:771 */
   REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:772 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:773 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:774 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:775 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:776 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:777 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:778 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:779 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:780 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:781 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:782 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:783 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:784 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:785 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:786 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:787 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:788 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:789 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:790 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:791 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:792 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:793 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:794 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:795 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:796 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:797 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:798 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:799 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:800 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:801 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:802 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:803 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:804 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction651_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:805 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction652_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:806 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction653_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:807 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:808 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:809 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction656_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:810 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:811 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:812 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:813 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:814 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:815 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:816 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:817 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:818 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:819 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:820 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:821 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:822 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction669_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:823 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction670_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:824 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:825 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:826 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:827 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:828 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:829 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:830 */
-  REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction677_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:831 */
-  REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction678_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:832 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction679_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:833 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction680_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:834 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction681_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:835 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:836 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction683_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:837 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction684_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:838 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction681_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:839 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction682_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:840 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:841 */
-  REGB0 = TAG_Int(140);
+  REGB0 = TAG_Int(135);
   fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:842 */
-  REGB0 = TAG_Int(141);
+  REGB0 = TAG_Int(136);
   fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:843 */
-  REGB0 = TAG_Int(141);
+  REGB0 = TAG_Int(136);
   fra.me.REG[2] = NEW_ReduceAction690_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:844 */
-  REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction691_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:845 */
-  REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction692_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:846 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction693_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:847 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction694_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:848 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:849 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction696_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:850 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction697_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:851 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction698_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:852 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:853 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction696_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:854 */
-  REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:855 */
-  REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction702_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:856 */
-  REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction703_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:857 */
-  REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:858 */
-  REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction705_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* ./parser//parser.nit:859 */
-  REGB0 = TAG_Int(149);
+  REGB0 = TAG_Int(137);
   fra.me.REG[2] = NEW_ReduceAction706_parser___ReduceAction___init(REGB0);
   /* ./parser//parser.nit:152 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:860 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction707_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:861 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:862 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:863 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:864 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:865 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:866 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:867 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction714_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:868 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction715_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:869 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction716_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:870 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction717_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:871 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction718_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:872 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction719_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:873 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction720_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:874 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction721_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:875 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction718_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:876 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction719_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:877 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction724_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:878 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction725_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:879 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction726_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:880 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction727_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:881 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction728_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:882 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction729_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:883 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction730_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:884 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction731_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:885 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:886 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction733_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:887 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:888 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction735_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:889 */
+  REGB0 = TAG_Int(151);
+  fra.me.REG[2] = NEW_ReduceAction736_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:890 */
+  REGB0 = TAG_Int(151);
+  fra.me.REG[2] = NEW_ReduceAction737_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:891 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:892 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction735_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:893 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:894 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction741_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:895 */
+  REGB0 = TAG_Int(154);
+  fra.me.REG[2] = NEW_ReduceAction742_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:896 */
+  REGB0 = TAG_Int(154);
+  fra.me.REG[2] = NEW_ReduceAction743_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:897 */
+  REGB0 = TAG_Int(155);
+  fra.me.REG[2] = NEW_ReduceAction744_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser.nit:898 */
+  REGB0 = TAG_Int(155);
+  fra.me.REG[2] = NEW_ReduceAction745_parser___ReduceAction___init(REGB0);
+  /* ./parser//parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_items(fra.me.REG[1]);
   ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -4422,7 +4617,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 890;
+  fra.me.line = 929;
   fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -4437,7 +4632,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:892 */
+  /* ./parser//parser.nit:931 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -4451,45 +4646,45 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:893 */
+    /* ./parser//parser.nit:932 */
     goto label1;
   } else {
-    /* ./parser//parser.nit:894 */
+    /* ./parser//parser.nit:933 */
     REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Token, ID_parser___parser_nodes___Token)) /*cast Token*/;
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser.nit:895 */
+      /* ./parser//parser.nit:934 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 895);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 934);
       }
       fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./parser//parser.nit:896 */
+      /* ./parser//parser.nit:935 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      /* ./parser//parser.nit:899 */
+      /* ./parser//parser.nit:938 */
       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, 899);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 938);
       }
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      /* ./../lib/standard//collection//array.nit:232 */
+      /* ./../lib/standard//collection//array.nit:269 */
       REGB0 = TAG_Int(0);
-      /* ./../lib/standard//collection//array.nit:233 */
+      /* ./../lib/standard//collection//array.nit:270 */
       REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 233);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
       }
       REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
-      /* ./../lib/standard//collection//array.nit:234 */
+      /* ./../lib/standard//collection//array.nit:271 */
       fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[3]);
-      /* ./../lib/standard//collection//array.nit:235 */
+      /* ./../lib/standard//collection//array.nit:272 */
       while(1) {
-        /* ./../lib/standard//collection//array.nit:23 */
+        /* ./../lib/standard//collection//array.nit:24 */
         REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 23);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
         }
         REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
         REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -4497,64 +4692,64 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ./../lib/standard//kernel.nit:215 */
+        /* ./../lib/standard//kernel.nit:232 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:235 */
+        /* ./../lib/standard//collection//array.nit:272 */
         if (UNTAG_Bool(REGB1)) {
-          /* ./../lib/standard//collection//array.nit:236 */
+          /* ./../lib/standard//collection//array.nit:273 */
           REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 236);
+            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ./../lib/standard//collection//array.nit:652 */
+          /* ./../lib/standard//collection//array.nit:718 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:900 */
+          /* ./parser//parser.nit:939 */
           ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ./../lib/standard//collection//array.nit:274 */
           REGB1 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:218 */
+          /* ./../lib/standard//kernel.nit:235 */
           REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ./../lib/standard//collection//array.nit:274 */
           REGB0 = REGB1;
         } else {
-          /* ./../lib/standard//collection//array.nit:235 */
+          /* ./../lib/standard//collection//array.nit:272 */
           goto label2;
         }
       }
       label2: while(0);
-      /* ./parser//parser.nit:902 */
+      /* ./parser//parser.nit:941 */
       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, 902);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 941);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-      /* ./parser//parser.nit:905 */
+      /* ./parser//parser.nit:944 */
       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, 905);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 944);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      /* ./../lib/standard//collection//array.nit:232 */
+      /* ./../lib/standard//collection//array.nit:269 */
       REGB0 = TAG_Int(0);
-      /* ./../lib/standard//collection//array.nit:233 */
+      /* ./../lib/standard//collection//array.nit:270 */
       REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 233);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
       }
       REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-      /* ./../lib/standard//collection//array.nit:234 */
+      /* ./../lib/standard//collection//array.nit:271 */
       fra.me.REG[3] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
-      /* ./../lib/standard//collection//array.nit:235 */
+      /* ./../lib/standard//collection//array.nit:272 */
       while(1) {
-        /* ./../lib/standard//collection//array.nit:23 */
+        /* ./../lib/standard//collection//array.nit:24 */
         REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 23);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
         }
         REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
         REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -4562,85 +4757,85 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ./../lib/standard//kernel.nit:215 */
+        /* ./../lib/standard//kernel.nit:232 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:235 */
+        /* ./../lib/standard//collection//array.nit:272 */
         if (UNTAG_Bool(REGB1)) {
-          /* ./../lib/standard//collection//array.nit:236 */
+          /* ./../lib/standard//collection//array.nit:273 */
           REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 236);
+            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ./../lib/standard//collection//array.nit:652 */
+          /* ./../lib/standard//collection//array.nit:718 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:908 */
+          /* ./parser//parser.nit:947 */
           fra.me.REG[6] = fra.me.REG[2];
-          /* ./parser//parser.nit:909 */
+          /* ./parser//parser.nit:948 */
           fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
-          /* ./parser//parser.nit:910 */
+          /* ./parser//parser.nit:949 */
           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, 910);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
           }
           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, 910);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
           }
           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___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ./../lib/standard//collection//array.nit:274 */
           REGB4 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:218 */
+          /* ./../lib/standard//kernel.nit:235 */
           REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ./../lib/standard//collection//array.nit:274 */
           REGB0 = REGB4;
         } else {
-          /* ./../lib/standard//collection//array.nit:235 */
+          /* ./../lib/standard//collection//array.nit:272 */
           goto label3;
         }
       }
       label3: while(0);
-      /* ./parser//parser.nit:912 */
+      /* ./parser//parser.nit:951 */
       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, 912);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 951);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
     } else {
-      /* ./parser//parser.nit:914 */
+      /* ./parser//parser.nit:953 */
       REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Prod, ID_parser___parser_nodes___Prod)) /*cast Prod*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser, 914);
+        nit_abort("Assert failed", NULL, LOCATE_parser, 953);
       }
-      /* ./parser//parser.nit:915 */
+      /* ./parser//parser.nit:954 */
       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, 915);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 954);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-      /* ./parser//parser.nit:917 */
+      /* ./parser//parser.nit:956 */
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:918 */
+      /* ./parser//parser.nit:957 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
-      /* ./parser//parser.nit:919 */
+      /* ./parser//parser.nit:958 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 919);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 958);
       }
       CALL_parser___parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      /* ./parser//parser.nit:920 */
+      /* ./parser//parser.nit:959 */
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:921 */
+      /* ./parser//parser.nit:960 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4656,11 +4851,11 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB0)) {
         ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
       }
-      /* ./parser//parser.nit:923 */
+      /* ./parser//parser.nit:962 */
       ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
-      /* ./parser//parser.nit:924 */
+      /* ./parser//parser.nit:963 */
       fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
-      /* ./parser//parser.nit:925 */
+      /* ./parser//parser.nit:964 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4675,7 +4870,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
       }
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* ./parser//parser.nit:927 */
+        /* ./parser//parser.nit:966 */
         REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
         } else {
@@ -4691,65 +4886,65 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
         REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
         if (UNTAG_Bool(REGB0)) {
         } else {
-          nit_abort("Assert failed", NULL, LOCATE_parser, 927);
+          nit_abort("Assert failed", NULL, LOCATE_parser, 966);
         }
-        /* ./parser//parser.nit:929 */
+        /* ./parser//parser.nit:968 */
         REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         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, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         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, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         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, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         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, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         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, 929);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
         }
         CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-        /* ./parser//parser.nit:931 */
+        /* ./parser//parser.nit:970 */
         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, 931);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 970);
         }
         fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:232 */
+        /* ./../lib/standard//collection//array.nit:269 */
         REGB2 = TAG_Int(0);
-        /* ./../lib/standard//collection//array.nit:233 */
+        /* ./../lib/standard//collection//array.nit:270 */
         REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 233);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
         }
         REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-        /* ./../lib/standard//collection//array.nit:234 */
+        /* ./../lib/standard//collection//array.nit:271 */
         fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
-        /* ./../lib/standard//collection//array.nit:235 */
+        /* ./../lib/standard//collection//array.nit:272 */
         while(1) {
-          /* ./../lib/standard//collection//array.nit:23 */
+          /* ./../lib/standard//collection//array.nit:24 */
           REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 23);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
           }
           REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
           REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -4757,90 +4952,90 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           } else {
             nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
           }
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ./../lib/standard//kernel.nit:232 */
           REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
-          /* ./../lib/standard//collection//array.nit:235 */
+          /* ./../lib/standard//collection//array.nit:272 */
           if (UNTAG_Bool(REGB3)) {
-            /* ./../lib/standard//collection//array.nit:236 */
+            /* ./../lib/standard//collection//array.nit:273 */
             REGB3 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 236);
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ./../lib/standard//collection//array.nit:652 */
+            /* ./../lib/standard//collection//array.nit:718 */
             fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:934 */
+            /* ./parser//parser.nit:973 */
             REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 934);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 973);
             }
             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, 934);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 973);
             }
             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, 934);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 973);
             }
             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, 934);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 973);
             }
             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, 934);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 973);
             }
             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___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ./../lib/standard//collection//array.nit:274 */
             REGB1 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:218 */
+            /* ./../lib/standard//kernel.nit:235 */
             REGB1 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ./../lib/standard//collection//array.nit:274 */
             REGB2 = REGB1;
           } else {
-            /* ./../lib/standard//collection//array.nit:235 */
+            /* ./../lib/standard//collection//array.nit:272 */
             goto label4;
           }
         }
         label4: while(0);
-        /* ./parser//parser.nit:936 */
+        /* ./parser//parser.nit:975 */
         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, 936);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 975);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
         CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
-        /* ./parser//parser.nit:938 */
+        /* ./parser//parser.nit:977 */
         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, 938);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 977);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:232 */
+        /* ./../lib/standard//collection//array.nit:269 */
         REGB2 = TAG_Int(0);
-        /* ./../lib/standard//collection//array.nit:233 */
+        /* ./../lib/standard//collection//array.nit:270 */
         REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 233);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
         }
         REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-        /* ./../lib/standard//collection//array.nit:234 */
+        /* ./../lib/standard//collection//array.nit:271 */
         fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
-        /* ./../lib/standard//collection//array.nit:235 */
+        /* ./../lib/standard//collection//array.nit:272 */
         while(1) {
-          /* ./../lib/standard//collection//array.nit:23 */
+          /* ./../lib/standard//collection//array.nit:24 */
           REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 23);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
           }
           REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
           REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -4848,67 +5043,67 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           } else {
             nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
           }
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ./../lib/standard//kernel.nit:232 */
           REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-          /* ./../lib/standard//collection//array.nit:235 */
+          /* ./../lib/standard//collection//array.nit:272 */
           if (UNTAG_Bool(REGB1)) {
-            /* ./../lib/standard//collection//array.nit:236 */
+            /* ./../lib/standard//collection//array.nit:273 */
             REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 236);
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ./../lib/standard//collection//array.nit:652 */
+            /* ./../lib/standard//collection//array.nit:718 */
             fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:941 */
+            /* ./parser//parser.nit:980 */
             REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 941);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 980);
             }
             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, 941);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 980);
             }
             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, 941);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 980);
             }
             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, 941);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 980);
             }
             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, 941);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 980);
             }
             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___parser_nodes___Prod___location__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ./../lib/standard//collection//array.nit:274 */
             REGB3 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:218 */
+            /* ./../lib/standard//kernel.nit:235 */
             REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ./../lib/standard//collection//array.nit:274 */
             REGB2 = REGB3;
           } else {
-            /* ./../lib/standard//collection//array.nit:235 */
+            /* ./../lib/standard//collection//array.nit:272 */
             goto label5;
           }
         }
         label5: while(0);
-        /* ./parser//parser.nit:943 */
+        /* ./parser//parser.nit:982 */
         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, 943);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 982);
         }
         fra.me.REG[8] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
         CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[8])(fra.me.REG[8]);
       } else {
-        /* ./parser//parser.nit:947 */
+        /* ./parser//parser.nit:986 */
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -4922,20 +5117,20 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           }
         }
         if (UNTAG_Bool(REGB2)) {
-          /* ./parser//parser.nit:949 */
+          /* ./parser//parser.nit:988 */
           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, 949);
+            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 988);
           }
           fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
         } else {
-          /* ./parser//parser.nit:952 */
+          /* ./parser//parser.nit:991 */
           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, 952);
+            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 991);
           }
           fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
@@ -4954,13 +5149,13 @@ void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 958;
+  fra.me.line = 997;
   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:958 */
+  /* ./parser//parser.nit:997 */
   CALL_parser___parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
@@ -4971,12 +5166,12 @@ void parser___ReduceAction___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 963;
+  fra.me.line = 1002;
   fra.me.meth = LOCATE_parser___ReduceAction___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser.nit:963 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser, 963);
+  /* ./parser//parser.nit:1002 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 1002);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -4986,7 +5181,7 @@ val_t parser___ReduceAction___concat(val_t p0, val_t p1, val_t p2){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 964;
+  fra.me.line = 1003;
   fra.me.meth = LOCATE_parser___ReduceAction___concat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4996,15 +5191,15 @@ val_t parser___ReduceAction___concat(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser.nit:966 */
+  /* ./parser//parser.nit:1005 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[0] = fra.me.REG[2];
     goto label1;
   }
-  /* ./parser//parser.nit:967 */
+  /* ./parser//parser.nit:1006 */
   CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:968 */
+  /* ./parser//parser.nit:1007 */
   fra.me.REG[0] = fra.me.REG[1];
   goto label1;
   label1: while(0);
@@ -5019,14 +5214,14 @@ void parser___ReduceAction___init(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 971;
+  fra.me.line = 1010;
   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;
   REGB0 = p1;
-  /* ./parser//parser.nit:971 */
+  /* ./parser//parser.nit:1010 */
   ATTR_parser___ReduceAction____goto(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos3] = 1;
@@ -5038,7 +5233,7 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 976;
+  fra.me.line = 1015;
   fra.me.meth = LOCATE_parser___ReduceAction0___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5049,21 +5244,21 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:978 */
+  /* ./parser//parser.nit:1017 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:979 */
+  /* ./parser//parser.nit:1018 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:980 */
+  /* ./parser//parser.nit:1019 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:981 */
+  /* ./parser//parser.nit:1020 */
   fra.me.REG[4] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:986 */
+  /* ./parser//parser.nit:1025 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:987 */
+  /* ./parser//parser.nit:1026 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 987);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1026);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5077,7 +5272,7 @@ void parser___ReduceAction1___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 992;
+  fra.me.line = 1031;
   fra.me.meth = LOCATE_parser___ReduceAction1___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5089,29 +5284,29 @@ void parser___ReduceAction1___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:994 */
+  /* ./parser//parser.nit:1033 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:995 */
+  /* ./parser//parser.nit:1034 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:996 */
+  /* ./parser//parser.nit:1035 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:997 */
+  /* ./parser//parser.nit:1036 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:999 */
+  /* ./parser//parser.nit:1038 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 999);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1038);
   }
-  /* ./parser//parser.nit:1000 */
+  /* ./parser//parser.nit:1039 */
   fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1005 */
+  /* ./parser//parser.nit:1044 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1006 */
+  /* ./parser//parser.nit:1045 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1006);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1045);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5125,7 +5320,7 @@ void parser___ReduceAction2___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1011;
+  fra.me.line = 1050;
   fra.me.meth = LOCATE_parser___ReduceAction2___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5137,32 +5332,32 @@ void parser___ReduceAction2___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1013 */
+  /* ./parser//parser.nit:1052 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1014 */
+  /* ./parser//parser.nit:1053 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1015 */
+  /* ./parser//parser.nit:1054 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1016 */
+  /* ./parser//parser.nit:1055 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1018 */
+  /* ./parser//parser.nit:1057 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1057);
   }
-  /* ./parser//parser.nit:1019 */
+  /* ./parser//parser.nit:1058 */
   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:1020 */
+  /* ./parser//parser.nit:1059 */
   fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1025 */
+  /* ./parser//parser.nit:1064 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1026 */
+  /* ./parser//parser.nit:1065 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1026);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1065);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5176,7 +5371,7 @@ void parser___ReduceAction3___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1031;
+  fra.me.line = 1070;
   fra.me.meth = LOCATE_parser___ReduceAction3___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5189,40 +5384,40 @@ void parser___ReduceAction3___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1033 */
+  /* ./parser//parser.nit:1072 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1034 */
+  /* ./parser//parser.nit:1073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1035 */
+  /* ./parser//parser.nit:1074 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1036 */
+  /* ./parser//parser.nit:1075 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1037 */
+  /* ./parser//parser.nit:1076 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1039 */
+  /* ./parser//parser.nit:1078 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1039);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1078);
   }
-  /* ./parser//parser.nit:1041 */
+  /* ./parser//parser.nit:1080 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1041);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1080);
   }
-  /* ./parser//parser.nit:1042 */
+  /* ./parser//parser.nit:1081 */
   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:1043 */
+  /* ./parser//parser.nit:1082 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1048 */
+  /* ./parser//parser.nit:1087 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1049 */
+  /* ./parser//parser.nit:1088 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1049);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1088);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5236,7 +5431,7 @@ void parser___ReduceAction4___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1054;
+  fra.me.line = 1093;
   fra.me.meth = LOCATE_parser___ReduceAction4___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5248,32 +5443,32 @@ void parser___ReduceAction4___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1056 */
+  /* ./parser//parser.nit:1095 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1057 */
+  /* ./parser//parser.nit:1096 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1058 */
+  /* ./parser//parser.nit:1097 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1059 */
+  /* ./parser//parser.nit:1098 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1061 */
+  /* ./parser//parser.nit:1100 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1100);
   }
-  /* ./parser//parser.nit:1062 */
+  /* ./parser//parser.nit:1101 */
   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:1063 */
+  /* ./parser//parser.nit:1102 */
   fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1068 */
+  /* ./parser//parser.nit:1107 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1069 */
+  /* ./parser//parser.nit:1108 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1108);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5287,7 +5482,7 @@ void parser___ReduceAction5___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1074;
+  fra.me.line = 1113;
   fra.me.meth = LOCATE_parser___ReduceAction5___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5300,40 +5495,40 @@ void parser___ReduceAction5___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1076 */
+  /* ./parser//parser.nit:1115 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1077 */
+  /* ./parser//parser.nit:1116 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1078 */
+  /* ./parser//parser.nit:1117 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1079 */
+  /* ./parser//parser.nit:1118 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1080 */
+  /* ./parser//parser.nit:1119 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1082 */
+  /* ./parser//parser.nit:1121 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1082);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1121);
   }
-  /* ./parser//parser.nit:1084 */
+  /* ./parser//parser.nit:1123 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1084);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1123);
   }
-  /* ./parser//parser.nit:1085 */
+  /* ./parser//parser.nit:1124 */
   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:1086 */
+  /* ./parser//parser.nit:1125 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1091 */
+  /* ./parser//parser.nit:1130 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1092 */
+  /* ./parser//parser.nit:1131 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1092);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1131);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5347,7 +5542,7 @@ void parser___ReduceAction6___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1097;
+  fra.me.line = 1136;
   fra.me.meth = LOCATE_parser___ReduceAction6___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5360,43 +5555,43 @@ void parser___ReduceAction6___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1099 */
+  /* ./parser//parser.nit:1138 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1100 */
+  /* ./parser//parser.nit:1139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1101 */
+  /* ./parser//parser.nit:1140 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1102 */
+  /* ./parser//parser.nit:1141 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1103 */
+  /* ./parser//parser.nit:1142 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1105 */
+  /* ./parser//parser.nit:1144 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1144);
   }
-  /* ./parser//parser.nit:1106 */
+  /* ./parser//parser.nit:1145 */
   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:1108 */
+  /* ./parser//parser.nit:1147 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1108);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1147);
   }
-  /* ./parser//parser.nit:1109 */
+  /* ./parser//parser.nit:1148 */
   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:1110 */
+  /* ./parser//parser.nit:1149 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1115 */
+  /* ./parser//parser.nit:1154 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1116 */
+  /* ./parser//parser.nit:1155 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1116);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1155);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5410,7 +5605,7 @@ void parser___ReduceAction7___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1121;
+  fra.me.line = 1160;
   fra.me.meth = LOCATE_parser___ReduceAction7___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5424,51 +5619,51 @@ void parser___ReduceAction7___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1123 */
+  /* ./parser//parser.nit:1162 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1124 */
+  /* ./parser//parser.nit:1163 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1125 */
+  /* ./parser//parser.nit:1164 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1126 */
+  /* ./parser//parser.nit:1165 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1127 */
+  /* ./parser//parser.nit:1166 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1128 */
+  /* ./parser//parser.nit:1167 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1130 */
+  /* ./parser//parser.nit:1169 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1169);
   }
-  /* ./parser//parser.nit:1132 */
+  /* ./parser//parser.nit:1171 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1171);
   }
-  /* ./parser//parser.nit:1133 */
+  /* ./parser//parser.nit:1172 */
   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 */
+  /* ./parser//parser.nit:1174 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1174);
   }
-  /* ./parser//parser.nit:1136 */
+  /* ./parser//parser.nit:1175 */
   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 */
+  /* ./parser//parser.nit:1176 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1142 */
+  /* ./parser//parser.nit:1181 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1143 */
+  /* ./parser//parser.nit:1182 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1143);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1182);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5483,7 +5678,7 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1148;
+  fra.me.line = 1187;
   fra.me.meth = LOCATE_parser___ReduceAction8___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5496,28 +5691,28 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1150 */
+  /* ./parser//parser.nit:1189 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1151 */
+  /* ./parser//parser.nit:1190 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1152 */
+  /* ./parser//parser.nit:1191 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1153 */
+  /* ./parser//parser.nit:1192 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1154 */
+  /* ./parser//parser.nit:1193 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1156 */
+  /* ./parser//parser.nit:1195 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1156);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1195);
   }
-  /* ./parser//parser.nit:1157 */
+  /* ./parser//parser.nit:1196 */
   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:1158 */
+  /* ./parser//parser.nit:1197 */
   fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1161 */
+  /* ./parser//parser.nit:1200 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5532,18 +5727,18 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1162 */
+    /* ./parser//parser.nit:1201 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1164 */
+  /* ./parser//parser.nit:1203 */
   fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1169 */
+  /* ./parser//parser.nit:1208 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1170 */
+  /* ./parser//parser.nit:1209 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1170);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1209);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5558,7 +5753,7 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1175;
+  fra.me.line = 1214;
   fra.me.meth = LOCATE_parser___ReduceAction9___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5572,36 +5767,36 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1177 */
+  /* ./parser//parser.nit:1216 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1178 */
+  /* ./parser//parser.nit:1217 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1179 */
+  /* ./parser//parser.nit:1218 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1180 */
+  /* ./parser//parser.nit:1219 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1181 */
+  /* ./parser//parser.nit:1220 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1183 */
+  /* ./parser//parser.nit:1222 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1183);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1222);
   }
-  /* ./parser//parser.nit:1184 */
+  /* ./parser//parser.nit:1223 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1186 */
+  /* ./parser//parser.nit:1225 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1186);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1225);
   }
-  /* ./parser//parser.nit:1187 */
+  /* ./parser//parser.nit:1226 */
   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:1188 */
+  /* ./parser//parser.nit:1227 */
   fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1191 */
+  /* ./parser//parser.nit:1230 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5616,18 +5811,18 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1192 */
+    /* ./parser//parser.nit:1231 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1194 */
+  /* ./parser//parser.nit:1233 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1199 */
+  /* ./parser//parser.nit:1238 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1200 */
+  /* ./parser//parser.nit:1239 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1239);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5642,7 +5837,7 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1205;
+  fra.me.line = 1244;
   fra.me.meth = LOCATE_parser___ReduceAction10___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5655,39 +5850,39 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1207 */
+  /* ./parser//parser.nit:1246 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1208 */
+  /* ./parser//parser.nit:1247 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1209 */
+  /* ./parser//parser.nit:1248 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1210 */
+  /* ./parser//parser.nit:1249 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1211 */
+  /* ./parser//parser.nit:1250 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1213 */
+  /* ./parser//parser.nit:1252 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1252);
   }
-  /* ./parser//parser.nit:1214 */
+  /* ./parser//parser.nit:1253 */
   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:1215 */
+  /* ./parser//parser.nit:1254 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1217 */
+  /* ./parser//parser.nit:1256 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1256);
   }
-  /* ./parser//parser.nit:1218 */
+  /* ./parser//parser.nit:1257 */
   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:1219 */
+  /* ./parser//parser.nit:1258 */
   fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1222 */
+  /* ./parser//parser.nit:1261 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5702,18 +5897,18 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1223 */
+    /* ./parser//parser.nit:1262 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1225 */
+  /* ./parser//parser.nit:1264 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1230 */
+  /* ./parser//parser.nit:1269 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1231 */
+  /* ./parser//parser.nit:1270 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1231);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1270);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5728,7 +5923,7 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1236;
+  fra.me.line = 1275;
   fra.me.meth = LOCATE_parser___ReduceAction11___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5742,47 +5937,47 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1238 */
+  /* ./parser//parser.nit:1277 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1239 */
+  /* ./parser//parser.nit:1278 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1240 */
+  /* ./parser//parser.nit:1279 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1241 */
+  /* ./parser//parser.nit:1280 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1242 */
+  /* ./parser//parser.nit:1281 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1243 */
+  /* ./parser//parser.nit:1282 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1245 */
+  /* ./parser//parser.nit:1284 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1284);
   }
-  /* ./parser//parser.nit:1247 */
+  /* ./parser//parser.nit:1286 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1247);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1286);
   }
-  /* ./parser//parser.nit:1248 */
+  /* ./parser//parser.nit:1287 */
   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:1249 */
+  /* ./parser//parser.nit:1288 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1251 */
+  /* ./parser//parser.nit:1290 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1290);
   }
-  /* ./parser//parser.nit:1252 */
+  /* ./parser//parser.nit:1291 */
   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:1253 */
+  /* ./parser//parser.nit:1292 */
   fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1256 */
+  /* ./parser//parser.nit:1295 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5797,18 +5992,18 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1257 */
+    /* ./parser//parser.nit:1296 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1259 */
+  /* ./parser//parser.nit:1298 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1264 */
+  /* ./parser//parser.nit:1303 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1265 */
+  /* ./parser//parser.nit:1304 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1265);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1304);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5823,7 +6018,7 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1270;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_parser___ReduceAction12___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5837,39 +6032,39 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1272 */
+  /* ./parser//parser.nit:1311 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1273 */
+  /* ./parser//parser.nit:1312 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1274 */
+  /* ./parser//parser.nit:1313 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1275 */
+  /* ./parser//parser.nit:1314 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1276 */
+  /* ./parser//parser.nit:1315 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1278 */
+  /* ./parser//parser.nit:1317 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1278);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1317);
   }
-  /* ./parser//parser.nit:1279 */
+  /* ./parser//parser.nit:1318 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1281 */
+  /* ./parser//parser.nit:1320 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1320);
   }
-  /* ./parser//parser.nit:1282 */
+  /* ./parser//parser.nit:1321 */
   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:1283 */
+  /* ./parser//parser.nit:1322 */
   fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1286 */
+  /* ./parser//parser.nit:1325 */
   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:1287 */
+  /* ./parser//parser.nit:1326 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5884,18 +6079,18 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1288 */
+    /* ./parser//parser.nit:1327 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1290 */
+  /* ./parser//parser.nit:1329 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1295 */
+  /* ./parser//parser.nit:1334 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1296 */
+  /* ./parser//parser.nit:1335 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1296);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1335);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5910,7 +6105,7 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1301;
+  fra.me.line = 1340;
   fra.me.meth = LOCATE_parser___ReduceAction13___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -5925,47 +6120,47 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1303 */
+  /* ./parser//parser.nit:1342 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1304 */
+  /* ./parser//parser.nit:1343 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1305 */
+  /* ./parser//parser.nit:1344 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1306 */
+  /* ./parser//parser.nit:1345 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1307 */
+  /* ./parser//parser.nit:1346 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1308 */
+  /* ./parser//parser.nit:1347 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1310 */
+  /* ./parser//parser.nit:1349 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1349);
   }
-  /* ./parser//parser.nit:1312 */
+  /* ./parser//parser.nit:1351 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1351);
   }
-  /* ./parser//parser.nit:1313 */
+  /* ./parser//parser.nit:1352 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1315 */
+  /* ./parser//parser.nit:1354 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1354);
   }
-  /* ./parser//parser.nit:1316 */
+  /* ./parser//parser.nit:1355 */
   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:1317 */
+  /* ./parser//parser.nit:1356 */
   fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1320 */
+  /* ./parser//parser.nit:1359 */
   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:1321 */
+  /* ./parser//parser.nit:1360 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5980,18 +6175,18 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1322 */
+    /* ./parser//parser.nit:1361 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1324 */
+  /* ./parser//parser.nit:1363 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1329 */
+  /* ./parser//parser.nit:1368 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1330 */
+  /* ./parser//parser.nit:1369 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1330);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1369);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6006,7 +6201,7 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1335;
+  fra.me.line = 1374;
   fra.me.meth = LOCATE_parser___ReduceAction14___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6020,50 +6215,50 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1337 */
+  /* ./parser//parser.nit:1376 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1338 */
+  /* ./parser//parser.nit:1377 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1339 */
+  /* ./parser//parser.nit:1378 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1340 */
+  /* ./parser//parser.nit:1379 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1341 */
+  /* ./parser//parser.nit:1380 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1342 */
+  /* ./parser//parser.nit:1381 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1344 */
+  /* ./parser//parser.nit:1383 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1383);
   }
-  /* ./parser//parser.nit:1345 */
+  /* ./parser//parser.nit:1384 */
   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:1347 */
+  /* ./parser//parser.nit:1386 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1347);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1386);
   }
-  /* ./parser//parser.nit:1348 */
+  /* ./parser//parser.nit:1387 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1350 */
+  /* ./parser//parser.nit:1389 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1389);
   }
-  /* ./parser//parser.nit:1351 */
+  /* ./parser//parser.nit:1390 */
   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:1352 */
+  /* ./parser//parser.nit:1391 */
   fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1355 */
+  /* ./parser//parser.nit:1394 */
   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:1356 */
+  /* ./parser//parser.nit:1395 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6078,18 +6273,18 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1357 */
+    /* ./parser//parser.nit:1396 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1359 */
+  /* ./parser//parser.nit:1398 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1364 */
+  /* ./parser//parser.nit:1403 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1365 */
+  /* ./parser//parser.nit:1404 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1365);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1404);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6104,7 +6299,7 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1370;
+  fra.me.line = 1409;
   fra.me.meth = LOCATE_parser___ReduceAction15___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6119,58 +6314,58 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1372 */
+  /* ./parser//parser.nit:1411 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1373 */
+  /* ./parser//parser.nit:1412 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1374 */
+  /* ./parser//parser.nit:1413 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1375 */
+  /* ./parser//parser.nit:1414 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1376 */
+  /* ./parser//parser.nit:1415 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1377 */
+  /* ./parser//parser.nit:1416 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1378 */
+  /* ./parser//parser.nit:1417 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1380 */
+  /* ./parser//parser.nit:1419 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1380);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1419);
   }
-  /* ./parser//parser.nit:1382 */
+  /* ./parser//parser.nit:1421 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1382);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1421);
   }
-  /* ./parser//parser.nit:1383 */
+  /* ./parser//parser.nit:1422 */
   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:1385 */
+  /* ./parser//parser.nit:1424 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1424);
   }
-  /* ./parser//parser.nit:1386 */
+  /* ./parser//parser.nit:1425 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1388 */
+  /* ./parser//parser.nit:1427 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1388);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1427);
   }
-  /* ./parser//parser.nit:1389 */
+  /* ./parser//parser.nit:1428 */
   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:1390 */
+  /* ./parser//parser.nit:1429 */
   fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1393 */
+  /* ./parser//parser.nit:1432 */
   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:1394 */
+  /* ./parser//parser.nit:1433 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6185,18 +6380,18 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1395 */
+    /* ./parser//parser.nit:1434 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1397 */
+  /* ./parser//parser.nit:1436 */
   fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1402 */
+  /* ./parser//parser.nit:1441 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1403 */
+  /* ./parser//parser.nit:1442 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1403);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1442);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6211,7 +6406,7 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1408;
+  fra.me.line = 1447;
   fra.me.meth = LOCATE_parser___ReduceAction16___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -6223,21 +6418,21 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1410 */
+  /* ./parser//parser.nit:1449 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1411 */
+  /* ./parser//parser.nit:1450 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1412 */
+  /* ./parser//parser.nit:1451 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1413 */
+  /* ./parser//parser.nit:1452 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1415 */
+  /* ./parser//parser.nit:1454 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1454);
   }
-  /* ./parser//parser.nit:1416 */
+  /* ./parser//parser.nit:1455 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6252,18 +6447,18 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1417 */
+    /* ./parser//parser.nit:1456 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1419 */
+  /* ./parser//parser.nit:1458 */
   fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1424 */
+  /* ./parser//parser.nit:1463 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1425 */
+  /* ./parser//parser.nit:1464 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1425);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1464);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6278,7 +6473,7 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1430;
+  fra.me.line = 1469;
   fra.me.meth = LOCATE_parser___ReduceAction17___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6291,29 +6486,29 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1432 */
+  /* ./parser//parser.nit:1471 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1433 */
+  /* ./parser//parser.nit:1472 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1434 */
+  /* ./parser//parser.nit:1473 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1435 */
+  /* ./parser//parser.nit:1474 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1436 */
+  /* ./parser//parser.nit:1475 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1438 */
+  /* ./parser//parser.nit:1477 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1477);
   }
-  /* ./parser//parser.nit:1440 */
+  /* ./parser//parser.nit:1479 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1479);
   }
-  /* ./parser//parser.nit:1441 */
+  /* ./parser//parser.nit:1480 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6328,18 +6523,18 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1442 */
+    /* ./parser//parser.nit:1481 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1444 */
+  /* ./parser//parser.nit:1483 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1449 */
+  /* ./parser//parser.nit:1488 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1450 */
+  /* ./parser//parser.nit:1489 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1450);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1489);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6354,7 +6549,7 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1455;
+  fra.me.line = 1494;
   fra.me.meth = LOCATE_parser___ReduceAction18___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6367,32 +6562,32 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1457 */
+  /* ./parser//parser.nit:1496 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1458 */
+  /* ./parser//parser.nit:1497 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1459 */
+  /* ./parser//parser.nit:1498 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1460 */
+  /* ./parser//parser.nit:1499 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1461 */
+  /* ./parser//parser.nit:1500 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1463 */
+  /* ./parser//parser.nit:1502 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1502);
   }
-  /* ./parser//parser.nit:1464 */
+  /* ./parser//parser.nit:1503 */
   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:1466 */
+  /* ./parser//parser.nit:1505 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1505);
   }
-  /* ./parser//parser.nit:1467 */
+  /* ./parser//parser.nit:1506 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6407,18 +6602,18 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1468 */
+    /* ./parser//parser.nit:1507 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1470 */
+  /* ./parser//parser.nit:1509 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1475 */
+  /* ./parser//parser.nit:1514 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1476 */
+  /* ./parser//parser.nit:1515 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1476);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1515);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6433,7 +6628,7 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1481;
+  fra.me.line = 1520;
   fra.me.meth = LOCATE_parser___ReduceAction19___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6447,40 +6642,40 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1483 */
+  /* ./parser//parser.nit:1522 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1484 */
+  /* ./parser//parser.nit:1523 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1485 */
+  /* ./parser//parser.nit:1524 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1486 */
+  /* ./parser//parser.nit:1525 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1487 */
+  /* ./parser//parser.nit:1526 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1488 */
+  /* ./parser//parser.nit:1527 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1490 */
+  /* ./parser//parser.nit:1529 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1529);
   }
-  /* ./parser//parser.nit:1492 */
+  /* ./parser//parser.nit:1531 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1531);
   }
-  /* ./parser//parser.nit:1493 */
+  /* ./parser//parser.nit:1532 */
   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:1495 */
+  /* ./parser//parser.nit:1534 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1534);
   }
-  /* ./parser//parser.nit:1496 */
+  /* ./parser//parser.nit:1535 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6495,18 +6690,18 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1497 */
+    /* ./parser//parser.nit:1536 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1499 */
+  /* ./parser//parser.nit:1538 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1504 */
+  /* ./parser//parser.nit:1543 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1505 */
+  /* ./parser//parser.nit:1544 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1544);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6521,7 +6716,7 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1510;
+  fra.me.line = 1549;
   fra.me.meth = LOCATE_parser___ReduceAction20___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6534,32 +6729,32 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1512 */
+  /* ./parser//parser.nit:1551 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1513 */
+  /* ./parser//parser.nit:1552 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1514 */
+  /* ./parser//parser.nit:1553 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1515 */
+  /* ./parser//parser.nit:1554 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1516 */
+  /* ./parser//parser.nit:1555 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1518 */
+  /* ./parser//parser.nit:1557 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1557);
   }
-  /* ./parser//parser.nit:1520 */
+  /* ./parser//parser.nit:1559 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1520);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1559);
   }
-  /* ./parser//parser.nit:1521 */
+  /* ./parser//parser.nit:1560 */
   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:1522 */
+  /* ./parser//parser.nit:1561 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6574,18 +6769,18 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1523 */
+    /* ./parser//parser.nit:1562 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1525 */
+  /* ./parser//parser.nit:1564 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1530 */
+  /* ./parser//parser.nit:1569 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1531 */
+  /* ./parser//parser.nit:1570 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1531);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1570);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6600,7 +6795,7 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1536;
+  fra.me.line = 1575;
   fra.me.meth = LOCATE_parser___ReduceAction21___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6614,40 +6809,40 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1538 */
+  /* ./parser//parser.nit:1577 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1539 */
+  /* ./parser//parser.nit:1578 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1540 */
+  /* ./parser//parser.nit:1579 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1541 */
+  /* ./parser//parser.nit:1580 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1542 */
+  /* ./parser//parser.nit:1581 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1543 */
+  /* ./parser//parser.nit:1582 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1545 */
+  /* ./parser//parser.nit:1584 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1545);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1584);
   }
-  /* ./parser//parser.nit:1547 */
+  /* ./parser//parser.nit:1586 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1586);
   }
-  /* ./parser//parser.nit:1549 */
+  /* ./parser//parser.nit:1588 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1549);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1588);
   }
-  /* ./parser//parser.nit:1550 */
+  /* ./parser//parser.nit:1589 */
   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:1551 */
+  /* ./parser//parser.nit:1590 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6662,18 +6857,18 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1552 */
+    /* ./parser//parser.nit:1591 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1554 */
+  /* ./parser//parser.nit:1593 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1559 */
+  /* ./parser//parser.nit:1598 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1560 */
+  /* ./parser//parser.nit:1599 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1560);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1599);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6688,7 +6883,7 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1565;
+  fra.me.line = 1604;
   fra.me.meth = LOCATE_parser___ReduceAction22___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6702,43 +6897,43 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1567 */
+  /* ./parser//parser.nit:1606 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1568 */
+  /* ./parser//parser.nit:1607 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1569 */
+  /* ./parser//parser.nit:1608 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1570 */
+  /* ./parser//parser.nit:1609 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1571 */
+  /* ./parser//parser.nit:1610 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1572 */
+  /* ./parser//parser.nit:1611 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1574 */
+  /* ./parser//parser.nit:1613 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1613);
   }
-  /* ./parser//parser.nit:1575 */
+  /* ./parser//parser.nit:1614 */
   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:1577 */
+  /* ./parser//parser.nit:1616 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1616);
   }
-  /* ./parser//parser.nit:1579 */
+  /* ./parser//parser.nit:1618 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1618);
   }
-  /* ./parser//parser.nit:1580 */
+  /* ./parser//parser.nit:1619 */
   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:1581 */
+  /* ./parser//parser.nit:1620 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6753,18 +6948,18 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1582 */
+    /* ./parser//parser.nit:1621 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1584 */
+  /* ./parser//parser.nit:1623 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1589 */
+  /* ./parser//parser.nit:1628 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1590 */
+  /* ./parser//parser.nit:1629 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1590);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1629);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6779,7 +6974,7 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1595;
+  fra.me.line = 1634;
   fra.me.meth = LOCATE_parser___ReduceAction23___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6794,51 +6989,51 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1597 */
+  /* ./parser//parser.nit:1636 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1598 */
+  /* ./parser//parser.nit:1637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1599 */
+  /* ./parser//parser.nit:1638 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1600 */
+  /* ./parser//parser.nit:1639 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1601 */
+  /* ./parser//parser.nit:1640 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1602 */
+  /* ./parser//parser.nit:1641 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1603 */
+  /* ./parser//parser.nit:1642 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1605 */
+  /* ./parser//parser.nit:1644 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1605);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1644);
   }
-  /* ./parser//parser.nit:1607 */
+  /* ./parser//parser.nit:1646 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1646);
   }
-  /* ./parser//parser.nit:1608 */
+  /* ./parser//parser.nit:1647 */
   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:1610 */
+  /* ./parser//parser.nit:1649 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1649);
   }
-  /* ./parser//parser.nit:1612 */
+  /* ./parser//parser.nit:1651 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1612);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1651);
   }
-  /* ./parser//parser.nit:1613 */
+  /* ./parser//parser.nit:1652 */
   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:1614 */
+  /* ./parser//parser.nit:1653 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6853,18 +7048,18 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1615 */
+    /* ./parser//parser.nit:1654 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1617 */
+  /* ./parser//parser.nit:1656 */
   fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1622 */
+  /* ./parser//parser.nit:1661 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1623 */
+  /* ./parser//parser.nit:1662 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1623);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1662);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6879,7 +7074,7 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1628;
+  fra.me.line = 1667;
   fra.me.meth = LOCATE_parser___ReduceAction24___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6893,36 +7088,36 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1630 */
+  /* ./parser//parser.nit:1669 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1631 */
+  /* ./parser//parser.nit:1670 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1632 */
+  /* ./parser//parser.nit:1671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1633 */
+  /* ./parser//parser.nit:1672 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1634 */
+  /* ./parser//parser.nit:1673 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1635 */
+  /* ./parser//parser.nit:1674 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1637 */
+  /* ./parser//parser.nit:1676 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1637);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1676);
   }
-  /* ./parser//parser.nit:1638 */
+  /* ./parser//parser.nit:1677 */
   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:1639 */
+  /* ./parser//parser.nit:1678 */
   fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1643 */
+  /* ./parser//parser.nit:1682 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1682);
   }
-  /* ./parser//parser.nit:1644 */
+  /* ./parser//parser.nit:1683 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6937,10 +7132,10 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1645 */
+    /* ./parser//parser.nit:1684 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1647 */
+  /* ./parser//parser.nit:1686 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6955,18 +7150,18 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1648 */
+    /* ./parser//parser.nit:1687 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1650 */
+  /* ./parser//parser.nit:1689 */
   fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1655 */
+  /* ./parser//parser.nit:1694 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1656 */
+  /* ./parser//parser.nit:1695 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1656);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1695);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6981,7 +7176,7 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1661;
+  fra.me.line = 1700;
   fra.me.meth = LOCATE_parser___ReduceAction25___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6996,44 +7191,44 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1663 */
+  /* ./parser//parser.nit:1702 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1664 */
+  /* ./parser//parser.nit:1703 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1665 */
+  /* ./parser//parser.nit:1704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1666 */
+  /* ./parser//parser.nit:1705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1667 */
+  /* ./parser//parser.nit:1706 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1668 */
+  /* ./parser//parser.nit:1707 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1670 */
+  /* ./parser//parser.nit:1709 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1670);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1709);
   }
-  /* ./parser//parser.nit:1671 */
+  /* ./parser//parser.nit:1710 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1673 */
+  /* ./parser//parser.nit:1712 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1712);
   }
-  /* ./parser//parser.nit:1674 */
+  /* ./parser//parser.nit:1713 */
   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:1675 */
+  /* ./parser//parser.nit:1714 */
   fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1679 */
+  /* ./parser//parser.nit:1718 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1679);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1718);
   }
-  /* ./parser//parser.nit:1680 */
+  /* ./parser//parser.nit:1719 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7048,10 +7243,10 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1681 */
+    /* ./parser//parser.nit:1720 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1683 */
+  /* ./parser//parser.nit:1722 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7066,18 +7261,18 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1684 */
+    /* ./parser//parser.nit:1723 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1686 */
+  /* ./parser//parser.nit:1725 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1691 */
+  /* ./parser//parser.nit:1730 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1692 */
+  /* ./parser//parser.nit:1731 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1692);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1731);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7092,7 +7287,7 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1697;
+  fra.me.line = 1736;
   fra.me.meth = LOCATE_parser___ReduceAction26___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7106,47 +7301,47 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1699 */
+  /* ./parser//parser.nit:1738 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1700 */
+  /* ./parser//parser.nit:1739 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1701 */
+  /* ./parser//parser.nit:1740 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1702 */
+  /* ./parser//parser.nit:1741 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1703 */
+  /* ./parser//parser.nit:1742 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1704 */
+  /* ./parser//parser.nit:1743 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1706 */
+  /* ./parser//parser.nit:1745 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1745);
   }
-  /* ./parser//parser.nit:1707 */
+  /* ./parser//parser.nit:1746 */
   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:1708 */
+  /* ./parser//parser.nit:1747 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1710 */
+  /* ./parser//parser.nit:1749 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1749);
   }
-  /* ./parser//parser.nit:1711 */
+  /* ./parser//parser.nit:1750 */
   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:1712 */
+  /* ./parser//parser.nit:1751 */
   fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1716 */
+  /* ./parser//parser.nit:1755 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1716);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1755);
   }
-  /* ./parser//parser.nit:1717 */
+  /* ./parser//parser.nit:1756 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7161,10 +7356,10 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1718 */
+    /* ./parser//parser.nit:1757 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1720 */
+  /* ./parser//parser.nit:1759 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7179,18 +7374,18 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1721 */
+    /* ./parser//parser.nit:1760 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1723 */
+  /* ./parser//parser.nit:1762 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1728 */
+  /* ./parser//parser.nit:1767 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1729 */
+  /* ./parser//parser.nit:1768 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1729);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1768);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7205,7 +7400,7 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1734;
+  fra.me.line = 1773;
   fra.me.meth = LOCATE_parser___ReduceAction27___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7220,55 +7415,55 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1736 */
+  /* ./parser//parser.nit:1775 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1737 */
+  /* ./parser//parser.nit:1776 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1738 */
+  /* ./parser//parser.nit:1777 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1739 */
+  /* ./parser//parser.nit:1778 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1740 */
+  /* ./parser//parser.nit:1779 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1741 */
+  /* ./parser//parser.nit:1780 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1742 */
+  /* ./parser//parser.nit:1781 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1744 */
+  /* ./parser//parser.nit:1783 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1783);
   }
-  /* ./parser//parser.nit:1746 */
+  /* ./parser//parser.nit:1785 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1785);
   }
-  /* ./parser//parser.nit:1747 */
+  /* ./parser//parser.nit:1786 */
   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:1748 */
+  /* ./parser//parser.nit:1787 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1750 */
+  /* ./parser//parser.nit:1789 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1789);
   }
-  /* ./parser//parser.nit:1751 */
+  /* ./parser//parser.nit:1790 */
   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:1752 */
+  /* ./parser//parser.nit:1791 */
   fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1756 */
+  /* ./parser//parser.nit:1795 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1756);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1795);
   }
-  /* ./parser//parser.nit:1757 */
+  /* ./parser//parser.nit:1796 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7283,10 +7478,10 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1758 */
+    /* ./parser//parser.nit:1797 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1760 */
+  /* ./parser//parser.nit:1799 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7301,18 +7496,18 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1761 */
+    /* ./parser//parser.nit:1800 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1763 */
+  /* ./parser//parser.nit:1802 */
   fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1768 */
+  /* ./parser//parser.nit:1807 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1769 */
+  /* ./parser//parser.nit:1808 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1769);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1808);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7327,7 +7522,7 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1774;
+  fra.me.line = 1813;
   fra.me.meth = LOCATE_parser___ReduceAction28___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7342,47 +7537,47 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1776 */
+  /* ./parser//parser.nit:1815 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1777 */
+  /* ./parser//parser.nit:1816 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1778 */
+  /* ./parser//parser.nit:1817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1779 */
+  /* ./parser//parser.nit:1818 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1780 */
+  /* ./parser//parser.nit:1819 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1781 */
+  /* ./parser//parser.nit:1820 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1783 */
+  /* ./parser//parser.nit:1822 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1822);
   }
-  /* ./parser//parser.nit:1784 */
+  /* ./parser//parser.nit:1823 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1786 */
+  /* ./parser//parser.nit:1825 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1825);
   }
-  /* ./parser//parser.nit:1787 */
+  /* ./parser//parser.nit:1826 */
   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:1788 */
+  /* ./parser//parser.nit:1827 */
   fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1792 */
+  /* ./parser//parser.nit:1831 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1831);
   }
-  /* ./parser//parser.nit:1793 */
+  /* ./parser//parser.nit:1832 */
   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:1794 */
+  /* ./parser//parser.nit:1833 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7397,10 +7592,10 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1795 */
+    /* ./parser//parser.nit:1834 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1797 */
+  /* ./parser//parser.nit:1836 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7415,18 +7610,18 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1798 */
+    /* ./parser//parser.nit:1837 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1800 */
+  /* ./parser//parser.nit:1839 */
   fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1805 */
+  /* ./parser//parser.nit:1844 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1806 */
+  /* ./parser//parser.nit:1845 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1806);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1845);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7441,7 +7636,7 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1811;
+  fra.me.line = 1850;
   fra.me.meth = LOCATE_parser___ReduceAction29___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -7457,55 +7652,55 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1813 */
+  /* ./parser//parser.nit:1852 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1814 */
+  /* ./parser//parser.nit:1853 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1815 */
+  /* ./parser//parser.nit:1854 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1816 */
+  /* ./parser//parser.nit:1855 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1817 */
+  /* ./parser//parser.nit:1856 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1818 */
+  /* ./parser//parser.nit:1857 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1819 */
+  /* ./parser//parser.nit:1858 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1821 */
+  /* ./parser//parser.nit:1860 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1860);
   }
-  /* ./parser//parser.nit:1823 */
+  /* ./parser//parser.nit:1862 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1862);
   }
-  /* ./parser//parser.nit:1824 */
+  /* ./parser//parser.nit:1863 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1826 */
+  /* ./parser//parser.nit:1865 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1865);
   }
-  /* ./parser//parser.nit:1827 */
+  /* ./parser//parser.nit:1866 */
   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:1828 */
+  /* ./parser//parser.nit:1867 */
   fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* ./parser//parser.nit:1832 */
+  /* ./parser//parser.nit:1871 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1871);
   }
-  /* ./parser//parser.nit:1833 */
+  /* ./parser//parser.nit:1872 */
   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:1834 */
+  /* ./parser//parser.nit:1873 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7520,10 +7715,10 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1835 */
+    /* ./parser//parser.nit:1874 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
-  /* ./parser//parser.nit:1837 */
+  /* ./parser//parser.nit:1876 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7538,18 +7733,18 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1838 */
+    /* ./parser//parser.nit:1877 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1840 */
+  /* ./parser//parser.nit:1879 */
   fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1845 */
+  /* ./parser//parser.nit:1884 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1846 */
+  /* ./parser//parser.nit:1885 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1846);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1885);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7564,7 +7759,7 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1851;
+  fra.me.line = 1890;
   fra.me.meth = LOCATE_parser___ReduceAction30___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -7579,58 +7774,58 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1853 */
+  /* ./parser//parser.nit:1892 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1854 */
+  /* ./parser//parser.nit:1893 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1855 */
+  /* ./parser//parser.nit:1894 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1856 */
+  /* ./parser//parser.nit:1895 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1857 */
+  /* ./parser//parser.nit:1896 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1858 */
+  /* ./parser//parser.nit:1897 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1859 */
+  /* ./parser//parser.nit:1898 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1861 */
+  /* ./parser//parser.nit:1900 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1861);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1900);
   }
-  /* ./parser//parser.nit:1862 */
+  /* ./parser//parser.nit:1901 */
   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:1864 */
+  /* ./parser//parser.nit:1903 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1903);
   }
-  /* ./parser//parser.nit:1865 */
+  /* ./parser//parser.nit:1904 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1867 */
+  /* ./parser//parser.nit:1906 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1867);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1906);
   }
-  /* ./parser//parser.nit:1868 */
+  /* ./parser//parser.nit:1907 */
   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:1869 */
+  /* ./parser//parser.nit:1908 */
   fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1873 */
+  /* ./parser//parser.nit:1912 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1873);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1912);
   }
-  /* ./parser//parser.nit:1874 */
+  /* ./parser//parser.nit:1913 */
   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:1875 */
+  /* ./parser//parser.nit:1914 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7645,10 +7840,10 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1876 */
+    /* ./parser//parser.nit:1915 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1878 */
+  /* ./parser//parser.nit:1917 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7663,18 +7858,18 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1879 */
+    /* ./parser//parser.nit:1918 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1881 */
+  /* ./parser//parser.nit:1920 */
   fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1886 */
+  /* ./parser//parser.nit:1925 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1887 */
+  /* ./parser//parser.nit:1926 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1887);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1926);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7689,7 +7884,7 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1892;
+  fra.me.line = 1931;
   fra.me.meth = LOCATE_parser___ReduceAction31___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -7705,66 +7900,66 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1894 */
+  /* ./parser//parser.nit:1933 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1895 */
+  /* ./parser//parser.nit:1934 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1896 */
+  /* ./parser//parser.nit:1935 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1897 */
+  /* ./parser//parser.nit:1936 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1898 */
+  /* ./parser//parser.nit:1937 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1899 */
+  /* ./parser//parser.nit:1938 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1900 */
+  /* ./parser//parser.nit:1939 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1901 */
+  /* ./parser//parser.nit:1940 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1903 */
+  /* ./parser//parser.nit:1942 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1903);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1942);
   }
-  /* ./parser//parser.nit:1905 */
+  /* ./parser//parser.nit:1944 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1944);
   }
-  /* ./parser//parser.nit:1906 */
+  /* ./parser//parser.nit:1945 */
   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:1908 */
+  /* ./parser//parser.nit:1947 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1947);
   }
-  /* ./parser//parser.nit:1909 */
+  /* ./parser//parser.nit:1948 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:1911 */
+  /* ./parser//parser.nit:1950 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1911);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1950);
   }
-  /* ./parser//parser.nit:1912 */
+  /* ./parser//parser.nit:1951 */
   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:1913 */
+  /* ./parser//parser.nit:1952 */
   fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1917 */
+  /* ./parser//parser.nit:1956 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1917);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1956);
   }
-  /* ./parser//parser.nit:1918 */
+  /* ./parser//parser.nit:1957 */
   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:1919 */
+  /* ./parser//parser.nit:1958 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7779,10 +7974,10 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1920 */
+    /* ./parser//parser.nit:1959 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1922 */
+  /* ./parser//parser.nit:1961 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7797,18 +7992,18 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1923 */
+    /* ./parser//parser.nit:1962 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1925 */
+  /* ./parser//parser.nit:1964 */
   fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* ./parser//parser.nit:1930 */
+  /* ./parser//parser.nit:1969 */
   fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:1931 */
+  /* ./parser//parser.nit:1970 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1931);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1970);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7822,7 +8017,7 @@ void parser___ReduceAction32___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1936;
+  fra.me.line = 1975;
   fra.me.meth = LOCATE_parser___ReduceAction32___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -7834,45 +8029,45 @@ void parser___ReduceAction32___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1938 */
+  /* ./parser//parser.nit:1977 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1939 */
+  /* ./parser//parser.nit:1978 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1940 */
+  /* ./parser//parser.nit:1979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1941 */
+  /* ./parser//parser.nit:1980 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1942 */
+  /* ./parser//parser.nit:1981 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1943 */
+  /* ./parser//parser.nit:1982 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1945 */
+  /* ./parser//parser.nit:1984 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1984);
   }
-  /* ./parser//parser.nit:1947 */
+  /* ./parser//parser.nit:1986 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast nullable TKwmodule*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1947);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1986);
   }
-  /* ./parser//parser.nit:1949 */
+  /* ./parser//parser.nit:1988 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1949);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1988);
   }
-  /* ./parser//parser.nit:1950 */
+  /* ./parser//parser.nit:1989 */
   fra.me.REG[3] = NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:1955 */
+  /* ./parser//parser.nit:1994 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:1956 */
+  /* ./parser//parser.nit:1995 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1956);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1995);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7886,7 +8081,7 @@ void parser___ReduceAction33___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1961;
+  fra.me.line = 2000;
   fra.me.meth = LOCATE_parser___ReduceAction33___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -7899,47 +8094,47 @@ void parser___ReduceAction33___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1963 */
+  /* ./parser//parser.nit:2002 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1964 */
+  /* ./parser//parser.nit:2003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1965 */
+  /* ./parser//parser.nit:2004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1966 */
+  /* ./parser//parser.nit:2005 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1967 */
+  /* ./parser//parser.nit:2006 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1968 */
+  /* ./parser//parser.nit:2007 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1969 */
+  /* ./parser//parser.nit:2008 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1971 */
+  /* ./parser//parser.nit:2010 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2010);
   }
-  /* ./parser//parser.nit:1973 */
+  /* ./parser//parser.nit:2012 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2012);
   }
-  /* ./parser//parser.nit:1975 */
+  /* ./parser//parser.nit:2014 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2014);
   }
-  /* ./parser//parser.nit:1976 */
+  /* ./parser//parser.nit:2015 */
   fra.me.REG[3] = NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:1981 */
+  /* ./parser//parser.nit:2020 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:1982 */
+  /* ./parser//parser.nit:2021 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1982);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2021);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7953,7 +8148,7 @@ void parser___ReduceAction34___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1987;
+  fra.me.line = 2026;
   fra.me.meth = LOCATE_parser___ReduceAction34___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -7966,47 +8161,47 @@ void parser___ReduceAction34___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1989 */
+  /* ./parser//parser.nit:2028 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1990 */
+  /* ./parser//parser.nit:2029 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1991 */
+  /* ./parser//parser.nit:2030 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1992 */
+  /* ./parser//parser.nit:2031 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1993 */
+  /* ./parser//parser.nit:2032 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1994 */
+  /* ./parser//parser.nit:2033 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1995 */
+  /* ./parser//parser.nit:2034 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1997 */
+  /* ./parser//parser.nit:2036 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2036);
   }
-  /* ./parser//parser.nit:1999 */
+  /* ./parser//parser.nit:2038 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1999);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2038);
   }
-  /* ./parser//parser.nit:2001 */
+  /* ./parser//parser.nit:2040 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2001);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2040);
   }
-  /* ./parser//parser.nit:2002 */
+  /* ./parser//parser.nit:2041 */
   fra.me.REG[3] = NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2007 */
+  /* ./parser//parser.nit:2046 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2008 */
+  /* ./parser//parser.nit:2047 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2008);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2047);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8021,7 +8216,7 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2013;
+  fra.me.line = 2052;
   fra.me.meth = LOCATE_parser___ReduceAction35___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8032,19 +8227,19 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2015 */
+  /* ./parser//parser.nit:2054 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2016 */
+  /* ./parser//parser.nit:2055 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2017 */
+  /* ./parser//parser.nit:2056 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2019 */
+  /* ./parser//parser.nit:2058 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast nullable APropdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2058);
   }
-  /* ./parser//parser.nit:2020 */
+  /* ./parser//parser.nit:2059 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8059,18 +8254,18 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2021 */
+    /* ./parser//parser.nit:2060 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2023 */
+  /* ./parser//parser.nit:2062 */
   fra.me.REG[4] = NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:2026 */
+  /* ./parser//parser.nit:2065 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2027 */
+  /* ./parser//parser.nit:2066 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2027);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2066);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8084,7 +8279,7 @@ void parser___ReduceAction36___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2032;
+  fra.me.line = 2071;
   fra.me.meth = LOCATE_parser___ReduceAction36___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8094,17 +8289,17 @@ void parser___ReduceAction36___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2034 */
+  /* ./parser//parser.nit:2073 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2035 */
+  /* ./parser//parser.nit:2074 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2036 */
+  /* ./parser//parser.nit:2075 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2037 */
+  /* ./parser//parser.nit:2076 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2076);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8118,7 +8313,7 @@ void parser___ReduceAction37___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2042;
+  fra.me.line = 2081;
   fra.me.meth = LOCATE_parser___ReduceAction37___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -8129,27 +8324,27 @@ void parser___ReduceAction37___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2044 */
+  /* ./parser//parser.nit:2083 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2045 */
+  /* ./parser//parser.nit:2084 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2046 */
+  /* ./parser//parser.nit:2085 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2048 */
+  /* ./parser//parser.nit:2087 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2048);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2087);
   }
-  /* ./parser//parser.nit:2049 */
+  /* ./parser//parser.nit:2088 */
   fra.me.REG[3] = NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:2053 */
+  /* ./parser//parser.nit:2092 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2054 */
+  /* ./parser//parser.nit:2093 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2054);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2093);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8163,7 +8358,7 @@ void parser___ReduceAction39___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2059;
+  fra.me.line = 2098;
   fra.me.meth = LOCATE_parser___ReduceAction39___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -8179,61 +8374,61 @@ void parser___ReduceAction39___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2061 */
+  /* ./parser//parser.nit:2100 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2062 */
+  /* ./parser//parser.nit:2101 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2063 */
+  /* ./parser//parser.nit:2102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2064 */
+  /* ./parser//parser.nit:2103 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2065 */
+  /* ./parser//parser.nit:2104 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2066 */
+  /* ./parser//parser.nit:2105 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2067 */
+  /* ./parser//parser.nit:2106 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2068 */
+  /* ./parser//parser.nit:2107 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2069 */
+  /* ./parser//parser.nit:2108 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2070 */
+  /* ./parser//parser.nit:2109 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2071 */
+  /* ./parser//parser.nit:2110 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2073 */
+  /* ./parser//parser.nit:2112 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2112);
   }
-  /* ./parser//parser.nit:2075 */
+  /* ./parser//parser.nit:2114 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2114);
   }
-  /* ./parser//parser.nit:2077 */
+  /* ./parser//parser.nit:2116 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2116);
   }
-  /* ./parser//parser.nit:2079 */
+  /* ./parser//parser.nit:2118 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2079);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2118);
   }
-  /* ./parser//parser.nit:2080 */
+  /* ./parser//parser.nit:2119 */
   fra.me.REG[9] = NEW_AStdClassdef_parser___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:2090 */
+  /* ./parser//parser.nit:2129 */
   fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:2091 */
+  /* ./parser//parser.nit:2130 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2091);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2130);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8247,7 +8442,7 @@ void parser___ReduceAction40___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2096;
+  fra.me.line = 2135;
   fra.me.meth = LOCATE_parser___ReduceAction40___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -8264,69 +8459,69 @@ void parser___ReduceAction40___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2098 */
+  /* ./parser//parser.nit:2137 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2099 */
+  /* ./parser//parser.nit:2138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2100 */
+  /* ./parser//parser.nit:2139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2101 */
+  /* ./parser//parser.nit:2140 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2102 */
+  /* ./parser//parser.nit:2141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2103 */
+  /* ./parser//parser.nit:2142 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2104 */
+  /* ./parser//parser.nit:2143 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2105 */
+  /* ./parser//parser.nit:2144 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2106 */
+  /* ./parser//parser.nit:2145 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2107 */
+  /* ./parser//parser.nit:2146 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2108 */
+  /* ./parser//parser.nit:2147 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2109 */
+  /* ./parser//parser.nit:2148 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2111 */
+  /* ./parser//parser.nit:2150 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2150);
   }
-  /* ./parser//parser.nit:2113 */
+  /* ./parser//parser.nit:2152 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2152);
   }
-  /* ./parser//parser.nit:2115 */
+  /* ./parser//parser.nit:2154 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2154);
   }
-  /* ./parser//parser.nit:2117 */
+  /* ./parser//parser.nit:2156 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2117);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2156);
   }
-  /* ./parser//parser.nit:2119 */
+  /* ./parser//parser.nit:2158 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2119);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2158);
   }
-  /* ./parser//parser.nit:2120 */
+  /* ./parser//parser.nit:2159 */
   fra.me.REG[10] = NEW_AStdClassdef_parser___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:2130 */
+  /* ./parser//parser.nit:2169 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2131 */
+  /* ./parser//parser.nit:2170 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2131);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2170);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8340,7 +8535,7 @@ void parser___ReduceAction41___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2136;
+  fra.me.line = 2175;
   fra.me.meth = LOCATE_parser___ReduceAction41___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -8357,72 +8552,72 @@ void parser___ReduceAction41___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2138 */
+  /* ./parser//parser.nit:2177 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2139 */
+  /* ./parser//parser.nit:2178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2140 */
+  /* ./parser//parser.nit:2179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2141 */
+  /* ./parser//parser.nit:2180 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2142 */
+  /* ./parser//parser.nit:2181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2143 */
+  /* ./parser//parser.nit:2182 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2144 */
+  /* ./parser//parser.nit:2183 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2145 */
+  /* ./parser//parser.nit:2184 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2146 */
+  /* ./parser//parser.nit:2185 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2147 */
+  /* ./parser//parser.nit:2186 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2148 */
+  /* ./parser//parser.nit:2187 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2149 */
+  /* ./parser//parser.nit:2188 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2151 */
+  /* ./parser//parser.nit:2190 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2190);
   }
-  /* ./parser//parser.nit:2153 */
+  /* ./parser//parser.nit:2192 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2192);
   }
-  /* ./parser//parser.nit:2155 */
+  /* ./parser//parser.nit:2194 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2194);
   }
-  /* ./parser//parser.nit:2157 */
+  /* ./parser//parser.nit:2196 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2196);
   }
-  /* ./parser//parser.nit:2159 */
+  /* ./parser//parser.nit:2198 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2198);
   }
-  /* ./parser//parser.nit:2160 */
+  /* ./parser//parser.nit:2199 */
   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:2161 */
+  /* ./parser//parser.nit:2200 */
   fra.me.REG[10] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2171 */
+  /* ./parser//parser.nit:2210 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2172 */
+  /* ./parser//parser.nit:2211 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2172);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2211);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8436,7 +8631,7 @@ void parser___ReduceAction42___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2177;
+  fra.me.line = 2216;
   fra.me.meth = LOCATE_parser___ReduceAction42___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -8454,80 +8649,80 @@ void parser___ReduceAction42___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2179 */
+  /* ./parser//parser.nit:2218 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2180 */
+  /* ./parser//parser.nit:2219 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2181 */
+  /* ./parser//parser.nit:2220 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2182 */
+  /* ./parser//parser.nit:2221 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2183 */
+  /* ./parser//parser.nit:2222 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2184 */
+  /* ./parser//parser.nit:2223 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2185 */
+  /* ./parser//parser.nit:2224 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2186 */
+  /* ./parser//parser.nit:2225 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2187 */
+  /* ./parser//parser.nit:2226 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2188 */
+  /* ./parser//parser.nit:2227 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2189 */
+  /* ./parser//parser.nit:2228 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2190 */
+  /* ./parser//parser.nit:2229 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2191 */
+  /* ./parser//parser.nit:2230 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2193 */
+  /* ./parser//parser.nit:2232 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2232);
   }
-  /* ./parser//parser.nit:2195 */
+  /* ./parser//parser.nit:2234 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2234);
   }
-  /* ./parser//parser.nit:2197 */
+  /* ./parser//parser.nit:2236 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2197);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2236);
   }
-  /* ./parser//parser.nit:2199 */
+  /* ./parser//parser.nit:2238 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2199);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2238);
   }
-  /* ./parser//parser.nit:2201 */
+  /* ./parser//parser.nit:2240 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2201);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2240);
   }
-  /* ./parser//parser.nit:2203 */
+  /* ./parser//parser.nit:2242 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2203);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2242);
   }
-  /* ./parser//parser.nit:2204 */
+  /* ./parser//parser.nit:2243 */
   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:2205 */
+  /* ./parser//parser.nit:2244 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2215 */
+  /* ./parser//parser.nit:2254 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2216 */
+  /* ./parser//parser.nit:2255 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2216);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2255);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8541,7 +8736,7 @@ void parser___ReduceAction43___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2221;
+  fra.me.line = 2260;
   fra.me.meth = LOCATE_parser___ReduceAction43___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -8558,72 +8753,72 @@ void parser___ReduceAction43___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2223 */
+  /* ./parser//parser.nit:2262 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2224 */
+  /* ./parser//parser.nit:2263 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2225 */
+  /* ./parser//parser.nit:2264 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2226 */
+  /* ./parser//parser.nit:2265 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2227 */
+  /* ./parser//parser.nit:2266 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2228 */
+  /* ./parser//parser.nit:2267 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2229 */
+  /* ./parser//parser.nit:2268 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2230 */
+  /* ./parser//parser.nit:2269 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2231 */
+  /* ./parser//parser.nit:2270 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2232 */
+  /* ./parser//parser.nit:2271 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2233 */
+  /* ./parser//parser.nit:2272 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2234 */
+  /* ./parser//parser.nit:2273 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2236 */
+  /* ./parser//parser.nit:2275 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2275);
   }
-  /* ./parser//parser.nit:2238 */
+  /* ./parser//parser.nit:2277 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2277);
   }
-  /* ./parser//parser.nit:2240 */
+  /* ./parser//parser.nit:2279 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2240);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2279);
   }
-  /* ./parser//parser.nit:2242 */
+  /* ./parser//parser.nit:2281 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2281);
   }
-  /* ./parser//parser.nit:2244 */
+  /* ./parser//parser.nit:2283 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2244);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2283);
   }
-  /* ./parser//parser.nit:2245 */
+  /* ./parser//parser.nit:2284 */
   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:2246 */
+  /* ./parser//parser.nit:2285 */
   fra.me.REG[10] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2256 */
+  /* ./parser//parser.nit:2295 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2257 */
+  /* ./parser//parser.nit:2296 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2257);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2296);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8637,7 +8832,7 @@ void parser___ReduceAction44___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2262;
+  fra.me.line = 2301;
   fra.me.meth = LOCATE_parser___ReduceAction44___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -8655,80 +8850,80 @@ void parser___ReduceAction44___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2264 */
+  /* ./parser//parser.nit:2303 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2265 */
+  /* ./parser//parser.nit:2304 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2266 */
+  /* ./parser//parser.nit:2305 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2267 */
+  /* ./parser//parser.nit:2306 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2268 */
+  /* ./parser//parser.nit:2307 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2269 */
+  /* ./parser//parser.nit:2308 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2270 */
+  /* ./parser//parser.nit:2309 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2271 */
+  /* ./parser//parser.nit:2310 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2272 */
+  /* ./parser//parser.nit:2311 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2273 */
+  /* ./parser//parser.nit:2312 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2274 */
+  /* ./parser//parser.nit:2313 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2275 */
+  /* ./parser//parser.nit:2314 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2276 */
+  /* ./parser//parser.nit:2315 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2278 */
+  /* ./parser//parser.nit:2317 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2278);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2317);
   }
-  /* ./parser//parser.nit:2280 */
+  /* ./parser//parser.nit:2319 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2280);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2319);
   }
-  /* ./parser//parser.nit:2282 */
+  /* ./parser//parser.nit:2321 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2321);
   }
-  /* ./parser//parser.nit:2284 */
+  /* ./parser//parser.nit:2323 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2323);
   }
-  /* ./parser//parser.nit:2286 */
+  /* ./parser//parser.nit:2325 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2325);
   }
-  /* ./parser//parser.nit:2288 */
+  /* ./parser//parser.nit:2327 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2327);
   }
-  /* ./parser//parser.nit:2289 */
+  /* ./parser//parser.nit:2328 */
   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:2290 */
+  /* ./parser//parser.nit:2329 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2300 */
+  /* ./parser//parser.nit:2339 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2301 */
+  /* ./parser//parser.nit:2340 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2301);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2340);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8742,7 +8937,7 @@ void parser___ReduceAction45___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2306;
+  fra.me.line = 2345;
   fra.me.meth = LOCATE_parser___ReduceAction45___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -8760,83 +8955,83 @@ void parser___ReduceAction45___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2308 */
+  /* ./parser//parser.nit:2347 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2309 */
+  /* ./parser//parser.nit:2348 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2310 */
+  /* ./parser//parser.nit:2349 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2311 */
+  /* ./parser//parser.nit:2350 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2312 */
+  /* ./parser//parser.nit:2351 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2313 */
+  /* ./parser//parser.nit:2352 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2314 */
+  /* ./parser//parser.nit:2353 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2315 */
+  /* ./parser//parser.nit:2354 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2316 */
+  /* ./parser//parser.nit:2355 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2317 */
+  /* ./parser//parser.nit:2356 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2318 */
+  /* ./parser//parser.nit:2357 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2319 */
+  /* ./parser//parser.nit:2358 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2320 */
+  /* ./parser//parser.nit:2359 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2322 */
+  /* ./parser//parser.nit:2361 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2361);
   }
-  /* ./parser//parser.nit:2324 */
+  /* ./parser//parser.nit:2363 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2363);
   }
-  /* ./parser//parser.nit:2326 */
+  /* ./parser//parser.nit:2365 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2365);
   }
-  /* ./parser//parser.nit:2328 */
+  /* ./parser//parser.nit:2367 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2367);
   }
-  /* ./parser//parser.nit:2330 */
+  /* ./parser//parser.nit:2369 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2369);
   }
-  /* ./parser//parser.nit:2331 */
+  /* ./parser//parser.nit:2370 */
   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:2333 */
+  /* ./parser//parser.nit:2372 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2372);
   }
-  /* ./parser//parser.nit:2334 */
+  /* ./parser//parser.nit:2373 */
   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:2335 */
+  /* ./parser//parser.nit:2374 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2345 */
+  /* ./parser//parser.nit:2384 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2346 */
+  /* ./parser//parser.nit:2385 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2346);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2385);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8850,7 +9045,7 @@ void parser___ReduceAction46___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2351;
+  fra.me.line = 2390;
   fra.me.meth = LOCATE_parser___ReduceAction46___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -8869,91 +9064,91 @@ void parser___ReduceAction46___action(val_t p0, val_t p1){
   fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2353 */
+  /* ./parser//parser.nit:2392 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2354 */
+  /* ./parser//parser.nit:2393 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2355 */
+  /* ./parser//parser.nit:2394 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2356 */
+  /* ./parser//parser.nit:2395 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2357 */
+  /* ./parser//parser.nit:2396 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2358 */
+  /* ./parser//parser.nit:2397 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2359 */
+  /* ./parser//parser.nit:2398 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2360 */
+  /* ./parser//parser.nit:2399 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2361 */
+  /* ./parser//parser.nit:2400 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2362 */
+  /* ./parser//parser.nit:2401 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2363 */
+  /* ./parser//parser.nit:2402 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2364 */
+  /* ./parser//parser.nit:2403 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2365 */
+  /* ./parser//parser.nit:2404 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2366 */
+  /* ./parser//parser.nit:2405 */
   fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2368 */
+  /* ./parser//parser.nit:2407 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2407);
   }
-  /* ./parser//parser.nit:2370 */
+  /* ./parser//parser.nit:2409 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2409);
   }
-  /* ./parser//parser.nit:2372 */
+  /* ./parser//parser.nit:2411 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2411);
   }
-  /* ./parser//parser.nit:2374 */
+  /* ./parser//parser.nit:2413 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2413);
   }
-  /* ./parser//parser.nit:2376 */
+  /* ./parser//parser.nit:2415 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2376);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2415);
   }
-  /* ./parser//parser.nit:2378 */
+  /* ./parser//parser.nit:2417 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2417);
   }
-  /* ./parser//parser.nit:2379 */
+  /* ./parser//parser.nit:2418 */
   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:2381 */
+  /* ./parser//parser.nit:2420 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2420);
   }
-  /* ./parser//parser.nit:2382 */
+  /* ./parser//parser.nit:2421 */
   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:2383 */
+  /* ./parser//parser.nit:2422 */
   fra.me.REG[12] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2393 */
+  /* ./parser//parser.nit:2432 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2394 */
+  /* ./parser//parser.nit:2433 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2394);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2433);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8967,7 +9162,7 @@ void parser___ReduceAction47___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2399;
+  fra.me.line = 2438;
   fra.me.meth = LOCATE_parser___ReduceAction47___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -8984,72 +9179,72 @@ void parser___ReduceAction47___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2401 */
+  /* ./parser//parser.nit:2440 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2402 */
+  /* ./parser//parser.nit:2441 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2403 */
+  /* ./parser//parser.nit:2442 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2404 */
+  /* ./parser//parser.nit:2443 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2405 */
+  /* ./parser//parser.nit:2444 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2406 */
+  /* ./parser//parser.nit:2445 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2407 */
+  /* ./parser//parser.nit:2446 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2408 */
+  /* ./parser//parser.nit:2447 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2409 */
+  /* ./parser//parser.nit:2448 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2410 */
+  /* ./parser//parser.nit:2449 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2411 */
+  /* ./parser//parser.nit:2450 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2412 */
+  /* ./parser//parser.nit:2451 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2414 */
+  /* ./parser//parser.nit:2453 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2414);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2453);
   }
-  /* ./parser//parser.nit:2416 */
+  /* ./parser//parser.nit:2455 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2455);
   }
-  /* ./parser//parser.nit:2418 */
+  /* ./parser//parser.nit:2457 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2457);
   }
-  /* ./parser//parser.nit:2420 */
+  /* ./parser//parser.nit:2459 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2459);
   }
-  /* ./parser//parser.nit:2422 */
+  /* ./parser//parser.nit:2461 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2461);
   }
-  /* ./parser//parser.nit:2423 */
+  /* ./parser//parser.nit:2462 */
   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:2424 */
+  /* ./parser//parser.nit:2463 */
   fra.me.REG[10] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2434 */
+  /* ./parser//parser.nit:2473 */
   fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2435 */
+  /* ./parser//parser.nit:2474 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2435);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2474);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9063,7 +9258,7 @@ void parser___ReduceAction48___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2440;
+  fra.me.line = 2479;
   fra.me.meth = LOCATE_parser___ReduceAction48___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9081,80 +9276,80 @@ void parser___ReduceAction48___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2442 */
+  /* ./parser//parser.nit:2481 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2443 */
+  /* ./parser//parser.nit:2482 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2444 */
+  /* ./parser//parser.nit:2483 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2445 */
+  /* ./parser//parser.nit:2484 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2446 */
+  /* ./parser//parser.nit:2485 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2447 */
+  /* ./parser//parser.nit:2486 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2448 */
+  /* ./parser//parser.nit:2487 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2449 */
+  /* ./parser//parser.nit:2488 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2450 */
+  /* ./parser//parser.nit:2489 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2451 */
+  /* ./parser//parser.nit:2490 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2452 */
+  /* ./parser//parser.nit:2491 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2453 */
+  /* ./parser//parser.nit:2492 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2454 */
+  /* ./parser//parser.nit:2493 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2456 */
+  /* ./parser//parser.nit:2495 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2495);
   }
-  /* ./parser//parser.nit:2458 */
+  /* ./parser//parser.nit:2497 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2497);
   }
-  /* ./parser//parser.nit:2460 */
+  /* ./parser//parser.nit:2499 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2499);
   }
-  /* ./parser//parser.nit:2462 */
+  /* ./parser//parser.nit:2501 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2462);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2501);
   }
-  /* ./parser//parser.nit:2464 */
+  /* ./parser//parser.nit:2503 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2464);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2503);
   }
-  /* ./parser//parser.nit:2466 */
+  /* ./parser//parser.nit:2505 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2505);
   }
-  /* ./parser//parser.nit:2467 */
+  /* ./parser//parser.nit:2506 */
   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:2468 */
+  /* ./parser//parser.nit:2507 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2478 */
+  /* ./parser//parser.nit:2517 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2479 */
+  /* ./parser//parser.nit:2518 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2479);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2518);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9168,7 +9363,7 @@ void parser___ReduceAction49___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2484;
+  fra.me.line = 2523;
   fra.me.meth = LOCATE_parser___ReduceAction49___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9186,83 +9381,83 @@ void parser___ReduceAction49___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2486 */
+  /* ./parser//parser.nit:2525 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2487 */
+  /* ./parser//parser.nit:2526 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2488 */
+  /* ./parser//parser.nit:2527 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2489 */
+  /* ./parser//parser.nit:2528 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2490 */
+  /* ./parser//parser.nit:2529 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2491 */
+  /* ./parser//parser.nit:2530 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2492 */
+  /* ./parser//parser.nit:2531 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2493 */
+  /* ./parser//parser.nit:2532 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2494 */
+  /* ./parser//parser.nit:2533 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2495 */
+  /* ./parser//parser.nit:2534 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2496 */
+  /* ./parser//parser.nit:2535 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2497 */
+  /* ./parser//parser.nit:2536 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2498 */
+  /* ./parser//parser.nit:2537 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2500 */
+  /* ./parser//parser.nit:2539 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2500);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2539);
   }
-  /* ./parser//parser.nit:2502 */
+  /* ./parser//parser.nit:2541 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2502);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2541);
   }
-  /* ./parser//parser.nit:2504 */
+  /* ./parser//parser.nit:2543 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2543);
   }
-  /* ./parser//parser.nit:2506 */
+  /* ./parser//parser.nit:2545 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2545);
   }
-  /* ./parser//parser.nit:2508 */
+  /* ./parser//parser.nit:2547 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2547);
   }
-  /* ./parser//parser.nit:2509 */
+  /* ./parser//parser.nit:2548 */
   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:2511 */
+  /* ./parser//parser.nit:2550 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2511);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2550);
   }
-  /* ./parser//parser.nit:2512 */
+  /* ./parser//parser.nit:2551 */
   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:2513 */
+  /* ./parser//parser.nit:2552 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2523 */
+  /* ./parser//parser.nit:2562 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2524 */
+  /* ./parser//parser.nit:2563 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2524);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2563);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9276,7 +9471,7 @@ void parser___ReduceAction50___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2529;
+  fra.me.line = 2568;
   fra.me.meth = LOCATE_parser___ReduceAction50___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -9295,91 +9490,91 @@ void parser___ReduceAction50___action(val_t p0, val_t p1){
   fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2531 */
+  /* ./parser//parser.nit:2570 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2532 */
+  /* ./parser//parser.nit:2571 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2533 */
+  /* ./parser//parser.nit:2572 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2534 */
+  /* ./parser//parser.nit:2573 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2535 */
+  /* ./parser//parser.nit:2574 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2536 */
+  /* ./parser//parser.nit:2575 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2537 */
+  /* ./parser//parser.nit:2576 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2538 */
+  /* ./parser//parser.nit:2577 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2539 */
+  /* ./parser//parser.nit:2578 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2540 */
+  /* ./parser//parser.nit:2579 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2541 */
+  /* ./parser//parser.nit:2580 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2542 */
+  /* ./parser//parser.nit:2581 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2543 */
+  /* ./parser//parser.nit:2582 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2544 */
+  /* ./parser//parser.nit:2583 */
   fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2546 */
+  /* ./parser//parser.nit:2585 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2546);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2585);
   }
-  /* ./parser//parser.nit:2548 */
+  /* ./parser//parser.nit:2587 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2587);
   }
-  /* ./parser//parser.nit:2550 */
+  /* ./parser//parser.nit:2589 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2589);
   }
-  /* ./parser//parser.nit:2552 */
+  /* ./parser//parser.nit:2591 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2591);
   }
-  /* ./parser//parser.nit:2554 */
+  /* ./parser//parser.nit:2593 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2593);
   }
-  /* ./parser//parser.nit:2556 */
+  /* ./parser//parser.nit:2595 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2595);
   }
-  /* ./parser//parser.nit:2557 */
+  /* ./parser//parser.nit:2596 */
   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:2559 */
+  /* ./parser//parser.nit:2598 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2559);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2598);
   }
-  /* ./parser//parser.nit:2560 */
+  /* ./parser//parser.nit:2599 */
   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:2561 */
+  /* ./parser//parser.nit:2600 */
   fra.me.REG[12] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2571 */
+  /* ./parser//parser.nit:2610 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2572 */
+  /* ./parser//parser.nit:2611 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2572);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2611);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9393,7 +9588,7 @@ void parser___ReduceAction51___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2577;
+  fra.me.line = 2616;
   fra.me.meth = LOCATE_parser___ReduceAction51___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
@@ -9411,83 +9606,83 @@ void parser___ReduceAction51___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2579 */
+  /* ./parser//parser.nit:2618 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2580 */
+  /* ./parser//parser.nit:2619 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2581 */
+  /* ./parser//parser.nit:2620 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2582 */
+  /* ./parser//parser.nit:2621 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2583 */
+  /* ./parser//parser.nit:2622 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2584 */
+  /* ./parser//parser.nit:2623 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2585 */
+  /* ./parser//parser.nit:2624 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2586 */
+  /* ./parser//parser.nit:2625 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2587 */
+  /* ./parser//parser.nit:2626 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2588 */
+  /* ./parser//parser.nit:2627 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2589 */
+  /* ./parser//parser.nit:2628 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2590 */
+  /* ./parser//parser.nit:2629 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2591 */
+  /* ./parser//parser.nit:2630 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2593 */
+  /* ./parser//parser.nit:2632 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2593);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2632);
   }
-  /* ./parser//parser.nit:2595 */
+  /* ./parser//parser.nit:2634 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2595);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2634);
   }
-  /* ./parser//parser.nit:2597 */
+  /* ./parser//parser.nit:2636 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2597);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2636);
   }
-  /* ./parser//parser.nit:2599 */
+  /* ./parser//parser.nit:2638 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2599);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2638);
   }
-  /* ./parser//parser.nit:2601 */
+  /* ./parser//parser.nit:2640 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2601);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2640);
   }
-  /* ./parser//parser.nit:2602 */
+  /* ./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:2604 */
+  /* ./parser//parser.nit:2643 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2604);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2643);
   }
-  /* ./parser//parser.nit:2605 */
+  /* ./parser//parser.nit:2644 */
   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:2606 */
+  /* ./parser//parser.nit:2645 */
   fra.me.REG[11] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2616 */
+  /* ./parser//parser.nit:2655 */
   fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2617 */
+  /* ./parser//parser.nit:2656 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2617);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2656);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9501,7 +9696,7 @@ void parser___ReduceAction52___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2622;
+  fra.me.line = 2661;
   fra.me.meth = LOCATE_parser___ReduceAction52___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -9520,91 +9715,91 @@ void parser___ReduceAction52___action(val_t p0, val_t p1){
   fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2624 */
+  /* ./parser//parser.nit:2663 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2625 */
+  /* ./parser//parser.nit:2664 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2626 */
+  /* ./parser//parser.nit:2665 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2627 */
+  /* ./parser//parser.nit:2666 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2628 */
+  /* ./parser//parser.nit:2667 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2629 */
+  /* ./parser//parser.nit:2668 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2630 */
+  /* ./parser//parser.nit:2669 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2631 */
+  /* ./parser//parser.nit:2670 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2632 */
+  /* ./parser//parser.nit:2671 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2633 */
+  /* ./parser//parser.nit:2672 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2634 */
+  /* ./parser//parser.nit:2673 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2635 */
+  /* ./parser//parser.nit:2674 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2636 */
+  /* ./parser//parser.nit:2675 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2637 */
+  /* ./parser//parser.nit:2676 */
   fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2639 */
+  /* ./parser//parser.nit:2678 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2678);
   }
-  /* ./parser//parser.nit:2641 */
+  /* ./parser//parser.nit:2680 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2680);
   }
-  /* ./parser//parser.nit:2643 */
+  /* ./parser//parser.nit:2682 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2682);
   }
-  /* ./parser//parser.nit:2645 */
+  /* ./parser//parser.nit:2684 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2684);
   }
-  /* ./parser//parser.nit:2647 */
+  /* ./parser//parser.nit:2686 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2647);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2686);
   }
-  /* ./parser//parser.nit:2649 */
+  /* ./parser//parser.nit:2688 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2688);
   }
-  /* ./parser//parser.nit:2650 */
+  /* ./parser//parser.nit:2689 */
   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:2652 */
+  /* ./parser//parser.nit:2691 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2691);
   }
-  /* ./parser//parser.nit:2653 */
+  /* ./parser//parser.nit:2692 */
   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:2654 */
+  /* ./parser//parser.nit:2693 */
   fra.me.REG[12] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2664 */
+  /* ./parser//parser.nit:2703 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2665 */
+  /* ./parser//parser.nit:2704 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2665);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2704);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9618,7 +9813,7 @@ void parser___ReduceAction53___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2670;
+  fra.me.line = 2709;
   fra.me.meth = LOCATE_parser___ReduceAction53___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 13;
@@ -9637,94 +9832,94 @@ void parser___ReduceAction53___action(val_t p0, val_t p1){
   fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2672 */
+  /* ./parser//parser.nit:2711 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2673 */
+  /* ./parser//parser.nit:2712 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2674 */
+  /* ./parser//parser.nit:2713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2675 */
+  /* ./parser//parser.nit:2714 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2676 */
+  /* ./parser//parser.nit:2715 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2677 */
+  /* ./parser//parser.nit:2716 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2678 */
+  /* ./parser//parser.nit:2717 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2679 */
+  /* ./parser//parser.nit:2718 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2680 */
+  /* ./parser//parser.nit:2719 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2681 */
+  /* ./parser//parser.nit:2720 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2682 */
+  /* ./parser//parser.nit:2721 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2683 */
+  /* ./parser//parser.nit:2722 */
   fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2684 */
+  /* ./parser//parser.nit:2723 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2685 */
+  /* ./parser//parser.nit:2724 */
   fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2687 */
+  /* ./parser//parser.nit:2726 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2687);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2726);
   }
-  /* ./parser//parser.nit:2689 */
+  /* ./parser//parser.nit:2728 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2689);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2728);
   }
-  /* ./parser//parser.nit:2691 */
+  /* ./parser//parser.nit:2730 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2730);
   }
-  /* ./parser//parser.nit:2693 */
+  /* ./parser//parser.nit:2732 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2732);
   }
-  /* ./parser//parser.nit:2695 */
+  /* ./parser//parser.nit:2734 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2734);
   }
-  /* ./parser//parser.nit:2696 */
+  /* ./parser//parser.nit:2735 */
   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:2698 */
+  /* ./parser//parser.nit:2737 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2737);
   }
-  /* ./parser//parser.nit:2699 */
+  /* ./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:2701 */
+  /* ./parser//parser.nit:2740 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2740);
   }
-  /* ./parser//parser.nit:2702 */
+  /* ./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:2703 */
+  /* ./parser//parser.nit:2742 */
   fra.me.REG[12] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2713 */
+  /* ./parser//parser.nit:2752 */
   fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2714 */
+  /* ./parser//parser.nit:2753 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2714);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2753);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9738,7 +9933,7 @@ void parser___ReduceAction54___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2719;
+  fra.me.line = 2758;
   fra.me.meth = LOCATE_parser___ReduceAction54___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 14;
@@ -9758,102 +9953,102 @@ void parser___ReduceAction54___action(val_t p0, val_t p1){
   fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2721 */
+  /* ./parser//parser.nit:2760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2722 */
+  /* ./parser//parser.nit:2761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2723 */
+  /* ./parser//parser.nit:2762 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2724 */
+  /* ./parser//parser.nit:2763 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2725 */
+  /* ./parser//parser.nit:2764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2726 */
+  /* ./parser//parser.nit:2765 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2727 */
+  /* ./parser//parser.nit:2766 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2728 */
+  /* ./parser//parser.nit:2767 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2729 */
+  /* ./parser//parser.nit:2768 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2730 */
+  /* ./parser//parser.nit:2769 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2731 */
+  /* ./parser//parser.nit:2770 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2732 */
+  /* ./parser//parser.nit:2771 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2733 */
+  /* ./parser//parser.nit:2772 */
   fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2734 */
+  /* ./parser//parser.nit:2773 */
   fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2735 */
+  /* ./parser//parser.nit:2774 */
   fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2737 */
+  /* ./parser//parser.nit:2776 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2737);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2776);
   }
-  /* ./parser//parser.nit:2739 */
+  /* ./parser//parser.nit:2778 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2739);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2778);
   }
-  /* ./parser//parser.nit:2741 */
+  /* ./parser//parser.nit:2780 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2780);
   }
-  /* ./parser//parser.nit:2743 */
+  /* ./parser//parser.nit:2782 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2782);
   }
-  /* ./parser//parser.nit:2745 */
+  /* ./parser//parser.nit:2784 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2745);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2784);
   }
-  /* ./parser//parser.nit:2747 */
+  /* ./parser//parser.nit:2786 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2786);
   }
-  /* ./parser//parser.nit:2748 */
+  /* ./parser//parser.nit:2787 */
   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:2750 */
+  /* ./parser//parser.nit:2789 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2789);
   }
-  /* ./parser//parser.nit:2751 */
+  /* ./parser//parser.nit:2790 */
   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:2753 */
+  /* ./parser//parser.nit:2792 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2792);
   }
-  /* ./parser//parser.nit:2754 */
+  /* ./parser//parser.nit:2793 */
   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:2755 */
+  /* ./parser//parser.nit:2794 */
   fra.me.REG[13] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13]);
-  /* ./parser//parser.nit:2765 */
+  /* ./parser//parser.nit:2804 */
   fra.me.REG[2] = fra.me.REG[13];
-  /* ./parser//parser.nit:2766 */
+  /* ./parser//parser.nit:2805 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2766);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2805);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9867,7 +10062,7 @@ void parser___ReduceAction55___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2771;
+  fra.me.line = 2810;
   fra.me.meth = LOCATE_parser___ReduceAction55___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9877,25 +10072,25 @@ void parser___ReduceAction55___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2773 */
+  /* ./parser//parser.nit:2812 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2774 */
+  /* ./parser//parser.nit:2813 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2776 */
+  /* ./parser//parser.nit:2815 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2815);
   }
-  /* ./parser//parser.nit:2777 */
+  /* ./parser//parser.nit:2816 */
   fra.me.REG[3] = NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2780 */
+  /* ./parser//parser.nit:2819 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2781 */
+  /* ./parser//parser.nit:2820 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2781);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2820);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9909,7 +10104,7 @@ void parser___ReduceAction56___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2786;
+  fra.me.line = 2825;
   fra.me.meth = LOCATE_parser___ReduceAction56___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -9920,33 +10115,33 @@ void parser___ReduceAction56___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2788 */
+  /* ./parser//parser.nit:2827 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2789 */
+  /* ./parser//parser.nit:2828 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2790 */
+  /* ./parser//parser.nit:2829 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2792 */
+  /* ./parser//parser.nit:2831 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast nullable TKwabstract*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2831);
   }
-  /* ./parser//parser.nit:2794 */
+  /* ./parser//parser.nit:2833 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2833);
   }
-  /* ./parser//parser.nit:2795 */
+  /* ./parser//parser.nit:2834 */
   fra.me.REG[3] = NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2799 */
+  /* ./parser//parser.nit:2838 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2800 */
+  /* ./parser//parser.nit:2839 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2800);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2839);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9960,7 +10155,7 @@ void parser___ReduceAction57___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2805;
+  fra.me.line = 2844;
   fra.me.meth = LOCATE_parser___ReduceAction57___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9970,25 +10165,25 @@ void parser___ReduceAction57___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2807 */
+  /* ./parser//parser.nit:2846 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2808 */
+  /* ./parser//parser.nit:2847 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2810 */
+  /* ./parser//parser.nit:2849 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast nullable TKwinterface*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2849);
   }
-  /* ./parser//parser.nit:2811 */
+  /* ./parser//parser.nit:2850 */
   fra.me.REG[3] = NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2814 */
+  /* ./parser//parser.nit:2853 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2815 */
+  /* ./parser//parser.nit:2854 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2815);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2854);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10002,7 +10197,7 @@ void parser___ReduceAction58___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2820;
+  fra.me.line = 2859;
   fra.me.meth = LOCATE_parser___ReduceAction58___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10012,25 +10207,25 @@ void parser___ReduceAction58___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2822 */
+  /* ./parser//parser.nit:2861 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2823 */
+  /* ./parser//parser.nit:2862 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2825 */
+  /* ./parser//parser.nit:2864 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast nullable TKwenum*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2864);
   }
-  /* ./parser//parser.nit:2826 */
+  /* ./parser//parser.nit:2865 */
   fra.me.REG[3] = NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2829 */
+  /* ./parser//parser.nit:2868 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2830 */
+  /* ./parser//parser.nit:2869 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2830);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2869);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10039,14 +10234,56 @@ void parser___ReduceAction58___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction59___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2874;
+  fra.me.meth = LOCATE_parser___ReduceAction59___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:2876 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:2877 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:2879 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast nullable TKwextern*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2879);
+  }
+  /* ./parser//parser.nit:2880 */
+  fra.me.REG[3] = NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[3]);
+  /* ./parser//parser.nit:2883 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:2884 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2884);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction60___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 = 2835;
-  fra.me.meth = LOCATE_parser___ReduceAction59___action;
+  fra.me.line = 2889;
+  fra.me.meth = LOCATE_parser___ReduceAction60___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -10056,21 +10293,21 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2837 */
+  /* ./parser//parser.nit:2891 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2838 */
+  /* ./parser//parser.nit:2892 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2839 */
+  /* ./parser//parser.nit:2893 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2840 */
+  /* ./parser//parser.nit:2894 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2841 */
+  /* ./parser//parser.nit:2895 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2842 */
+  /* ./parser//parser.nit:2896 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2843 */
+  /* ./parser//parser.nit:2897 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2845 */
+  /* ./parser//parser.nit:2899 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10085,16 +10322,16 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2846 */
+    /* ./parser//parser.nit:2900 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2848 */
+  /* ./parser//parser.nit:2902 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2849 */
+  /* ./parser//parser.nit:2903 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2849);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2903);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10102,15 +10339,15 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction60___action(val_t p0, val_t p1){
+void parser___ReduceAction61___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2854;
-  fra.me.meth = LOCATE_parser___ReduceAction60___action;
+  fra.me.line = 2908;
+  fra.me.meth = LOCATE_parser___ReduceAction61___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -10121,29 +10358,29 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2856 */
+  /* ./parser//parser.nit:2910 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2857 */
+  /* ./parser//parser.nit:2911 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2858 */
+  /* ./parser//parser.nit:2912 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2859 */
+  /* ./parser//parser.nit:2913 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2860 */
+  /* ./parser//parser.nit:2914 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2861 */
+  /* ./parser//parser.nit:2915 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2862 */
+  /* ./parser//parser.nit:2916 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2863 */
+  /* ./parser//parser.nit:2917 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:2866 */
+  /* ./parser//parser.nit:2920 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2920);
   }
-  /* ./parser//parser.nit:2867 */
+  /* ./parser//parser.nit:2921 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10158,19 +10395,19 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2868 */
+    /* ./parser//parser.nit:2922 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:2870 */
+  /* ./parser//parser.nit:2924 */
   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:2871 */
+  /* ./parser//parser.nit:2925 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:2872 */
+  /* ./parser//parser.nit:2926 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2872);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2926);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10178,14 +10415,14 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction61___action(val_t p0, val_t p1){
+void parser___ReduceAction62___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2877;
-  fra.me.meth = LOCATE_parser___ReduceAction61___action;
+  fra.me.line = 2931;
+  fra.me.meth = LOCATE_parser___ReduceAction62___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -10195,21 +10432,21 @@ void parser___ReduceAction61___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2879 */
+  /* ./parser//parser.nit:2933 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2880 */
+  /* ./parser//parser.nit:2934 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2881 */
+  /* ./parser//parser.nit:2935 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2882 */
+  /* ./parser//parser.nit:2936 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2884 */
+  /* ./parser//parser.nit:2938 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2885 */
+  /* ./parser//parser.nit:2939 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2885);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2939);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10217,14 +10454,14 @@ void parser___ReduceAction61___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction62___action(val_t p0, val_t p1){
+void parser___ReduceAction63___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2890;
-  fra.me.meth = LOCATE_parser___ReduceAction62___action;
+  fra.me.line = 2944;
+  fra.me.meth = LOCATE_parser___ReduceAction63___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -10233,25 +10470,25 @@ void parser___ReduceAction62___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2892 */
+  /* ./parser//parser.nit:2946 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2893 */
+  /* ./parser//parser.nit:2947 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2895 */
+  /* ./parser//parser.nit:2949 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2949);
   }
-  /* ./parser//parser.nit:2896 */
+  /* ./parser//parser.nit:2950 */
   fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:2900 */
+  /* ./parser//parser.nit:2954 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2901 */
+  /* ./parser//parser.nit:2955 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2901);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2955);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10259,14 +10496,14 @@ void parser___ReduceAction62___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction63___action(val_t p0, val_t p1){
+void parser___ReduceAction64___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2906;
-  fra.me.meth = LOCATE_parser___ReduceAction63___action;
+  fra.me.line = 2960;
+  fra.me.meth = LOCATE_parser___ReduceAction64___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -10276,33 +10513,33 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2908 */
+  /* ./parser//parser.nit:2962 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2909 */
+  /* ./parser//parser.nit:2963 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2910 */
+  /* ./parser//parser.nit:2964 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2912 */
+  /* ./parser//parser.nit:2966 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2966);
   }
-  /* ./parser//parser.nit:2914 */
+  /* ./parser//parser.nit:2968 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2968);
   }
-  /* ./parser//parser.nit:2915 */
+  /* ./parser//parser.nit:2969 */
   fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2919 */
+  /* ./parser//parser.nit:2973 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2920 */
+  /* ./parser//parser.nit:2974 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2920);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2974);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10310,14 +10547,14 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction64___action(val_t p0, val_t p1){
+void parser___ReduceAction65___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2925;
-  fra.me.meth = LOCATE_parser___ReduceAction64___action;
+  fra.me.line = 2979;
+  fra.me.meth = LOCATE_parser___ReduceAction65___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -10328,37 +10565,37 @@ void parser___ReduceAction64___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2927 */
+  /* ./parser//parser.nit:2981 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2928 */
+  /* ./parser//parser.nit:2982 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2929 */
+  /* ./parser//parser.nit:2983 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2930 */
+  /* ./parser//parser.nit:2984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2931 */
+  /* ./parser//parser.nit:2985 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2933 */
+  /* ./parser//parser.nit:2987 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast nullable TKwspecial*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2987);
   }
-  /* ./parser//parser.nit:2935 */
+  /* ./parser//parser.nit:2989 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2989);
   }
-  /* ./parser//parser.nit:2936 */
+  /* ./parser//parser.nit:2990 */
   fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:2941 */
+  /* ./parser//parser.nit:2995 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2942 */
+  /* ./parser//parser.nit:2996 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2942);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2996);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10366,14 +10603,14 @@ void parser___ReduceAction64___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction65___action(val_t p0, val_t p1){
+void parser___ReduceAction66___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2947;
-  fra.me.meth = LOCATE_parser___ReduceAction65___action;
+  fra.me.line = 3001;
+  fra.me.meth = LOCATE_parser___ReduceAction66___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -10384,37 +10621,37 @@ void parser___ReduceAction65___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2949 */
+  /* ./parser//parser.nit:3003 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2950 */
+  /* ./parser//parser.nit:3004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2951 */
+  /* ./parser//parser.nit:3005 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2952 */
+  /* ./parser//parser.nit:3006 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2953 */
+  /* ./parser//parser.nit:3007 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2955 */
+  /* ./parser//parser.nit:3009 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3009);
   }
-  /* ./parser//parser.nit:2957 */
+  /* ./parser//parser.nit:3011 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2957);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3011);
   }
-  /* ./parser//parser.nit:2958 */
+  /* ./parser//parser.nit:3012 */
   fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2963 */
+  /* ./parser//parser.nit:3017 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2964 */
+  /* ./parser//parser.nit:3018 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2964);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3018);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10422,14 +10659,14 @@ void parser___ReduceAction65___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction66___action(val_t p0, val_t p1){
+void parser___ReduceAction67___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2969;
-  fra.me.meth = LOCATE_parser___ReduceAction66___action;
+  fra.me.line = 3023;
+  fra.me.meth = LOCATE_parser___ReduceAction67___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -10438,19 +10675,19 @@ void parser___ReduceAction66___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2971 */
+  /* ./parser//parser.nit:3025 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2972 */
+  /* ./parser//parser.nit:3026 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2973 */
+  /* ./parser//parser.nit:3027 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2975 */
+  /* ./parser//parser.nit:3029 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2976 */
+  /* ./parser//parser.nit:3030 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2976);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3030);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10458,14 +10695,14 @@ void parser___ReduceAction66___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction67___action(val_t p0, val_t p1){
+void parser___ReduceAction68___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2981;
-  fra.me.meth = LOCATE_parser___ReduceAction67___action;
+  fra.me.line = 3035;
+  fra.me.meth = LOCATE_parser___ReduceAction68___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -10479,67 +10716,67 @@ void parser___ReduceAction67___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2983 */
+  /* ./parser//parser.nit:3037 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2984 */
+  /* ./parser//parser.nit:3038 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2985 */
+  /* ./parser//parser.nit:3039 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2986 */
+  /* ./parser//parser.nit:3040 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2987 */
+  /* ./parser//parser.nit:3041 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2988 */
+  /* ./parser//parser.nit:3042 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2989 */
+  /* ./parser//parser.nit:3043 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2990 */
+  /* ./parser//parser.nit:3044 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2992 */
+  /* ./parser//parser.nit:3046 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2992);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3046);
   }
-  /* ./parser//parser.nit:2994 */
+  /* ./parser//parser.nit:3048 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3048);
   }
-  /* ./parser//parser.nit:2996 */
+  /* ./parser//parser.nit:3050 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3050);
   }
-  /* ./parser//parser.nit:2998 */
+  /* ./parser//parser.nit:3052 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3052);
   }
-  /* ./parser//parser.nit:3000 */
+  /* ./parser//parser.nit:3054 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3054);
   }
-  /* ./parser//parser.nit:3002 */
+  /* ./parser//parser.nit:3056 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3002);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3056);
   }
-  /* ./parser//parser.nit:3003 */
+  /* ./parser//parser.nit:3057 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3012 */
+  /* ./parser//parser.nit:3066 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3013 */
+  /* ./parser//parser.nit:3067 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3013);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3067);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10547,14 +10784,14 @@ void parser___ReduceAction67___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction68___action(val_t p0, val_t p1){
+void parser___ReduceAction69___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3018;
-  fra.me.meth = LOCATE_parser___ReduceAction68___action;
+  fra.me.line = 3072;
+  fra.me.meth = LOCATE_parser___ReduceAction69___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -10569,75 +10806,75 @@ void parser___ReduceAction68___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3020 */
+  /* ./parser//parser.nit:3074 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3021 */
+  /* ./parser//parser.nit:3075 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3022 */
+  /* ./parser//parser.nit:3076 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3023 */
+  /* ./parser//parser.nit:3077 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3024 */
+  /* ./parser//parser.nit:3078 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3025 */
+  /* ./parser//parser.nit:3079 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3026 */
+  /* ./parser//parser.nit:3080 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3027 */
+  /* ./parser//parser.nit:3081 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3028 */
+  /* ./parser//parser.nit:3082 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3030 */
+  /* ./parser//parser.nit:3084 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3030);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3084);
   }
-  /* ./parser//parser.nit:3032 */
+  /* ./parser//parser.nit:3086 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3032);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3086);
   }
-  /* ./parser//parser.nit:3034 */
+  /* ./parser//parser.nit:3088 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3034);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3088);
   }
-  /* ./parser//parser.nit:3036 */
+  /* ./parser//parser.nit:3090 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3036);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3090);
   }
-  /* ./parser//parser.nit:3038 */
+  /* ./parser//parser.nit:3092 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3038);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3092);
   }
-  /* ./parser//parser.nit:3040 */
+  /* ./parser//parser.nit:3094 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3040);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3094);
   }
-  /* ./parser//parser.nit:3042 */
+  /* ./parser//parser.nit:3096 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3042);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3096);
   }
-  /* ./parser//parser.nit:3043 */
+  /* ./parser//parser.nit:3097 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3052 */
+  /* ./parser//parser.nit:3106 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3053 */
+  /* ./parser//parser.nit:3107 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3053);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3107);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10645,14 +10882,14 @@ void parser___ReduceAction68___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction69___action(val_t p0, val_t p1){
+void parser___ReduceAction70___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3058;
-  fra.me.meth = LOCATE_parser___ReduceAction69___action;
+  fra.me.line = 3112;
+  fra.me.meth = LOCATE_parser___ReduceAction70___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -10666,69 +10903,69 @@ void parser___ReduceAction69___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3060 */
+  /* ./parser//parser.nit:3114 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3061 */
+  /* ./parser//parser.nit:3115 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3062 */
+  /* ./parser//parser.nit:3116 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3063 */
+  /* ./parser//parser.nit:3117 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3064 */
+  /* ./parser//parser.nit:3118 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3065 */
+  /* ./parser//parser.nit:3119 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3066 */
+  /* ./parser//parser.nit:3120 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3067 */
+  /* ./parser//parser.nit:3121 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3068 */
+  /* ./parser//parser.nit:3122 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3070 */
+  /* ./parser//parser.nit:3124 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3124);
   }
-  /* ./parser//parser.nit:3072 */
+  /* ./parser//parser.nit:3126 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3072);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3126);
   }
-  /* ./parser//parser.nit:3074 */
+  /* ./parser//parser.nit:3128 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3074);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3128);
   }
-  /* ./parser//parser.nit:3076 */
+  /* ./parser//parser.nit:3130 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3076);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3130);
   }
-  /* ./parser//parser.nit:3078 */
+  /* ./parser//parser.nit:3132 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3132);
   }
-  /* ./parser//parser.nit:3080 */
+  /* ./parser//parser.nit:3134 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3080);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3134);
   }
-  /* ./parser//parser.nit:3081 */
+  /* ./parser//parser.nit:3135 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3090 */
+  /* ./parser//parser.nit:3144 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3091 */
+  /* ./parser//parser.nit:3145 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3091);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3145);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10736,14 +10973,14 @@ void parser___ReduceAction69___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction70___action(val_t p0, val_t p1){
+void parser___ReduceAction71___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3096;
-  fra.me.meth = LOCATE_parser___ReduceAction70___action;
+  fra.me.line = 3150;
+  fra.me.meth = LOCATE_parser___ReduceAction71___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -10758,77 +10995,77 @@ void parser___ReduceAction70___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3098 */
+  /* ./parser//parser.nit:3152 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3099 */
+  /* ./parser//parser.nit:3153 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3100 */
+  /* ./parser//parser.nit:3154 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3101 */
+  /* ./parser//parser.nit:3155 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3102 */
+  /* ./parser//parser.nit:3156 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3103 */
+  /* ./parser//parser.nit:3157 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3104 */
+  /* ./parser//parser.nit:3158 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3105 */
+  /* ./parser//parser.nit:3159 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3106 */
+  /* ./parser//parser.nit:3160 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3107 */
+  /* ./parser//parser.nit:3161 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3109 */
+  /* ./parser//parser.nit:3163 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3109);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3163);
   }
-  /* ./parser//parser.nit:3111 */
+  /* ./parser//parser.nit:3165 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3165);
   }
-  /* ./parser//parser.nit:3113 */
+  /* ./parser//parser.nit:3167 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3167);
   }
-  /* ./parser//parser.nit:3115 */
+  /* ./parser//parser.nit:3169 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3169);
   }
-  /* ./parser//parser.nit:3117 */
+  /* ./parser//parser.nit:3171 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3117);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3171);
   }
-  /* ./parser//parser.nit:3119 */
+  /* ./parser//parser.nit:3173 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3119);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3173);
   }
-  /* ./parser//parser.nit:3121 */
+  /* ./parser//parser.nit:3175 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3175);
   }
-  /* ./parser//parser.nit:3122 */
+  /* ./parser//parser.nit:3176 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3131 */
+  /* ./parser//parser.nit:3185 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3132 */
+  /* ./parser//parser.nit:3186 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3132);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3186);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10836,14 +11073,14 @@ void parser___ReduceAction70___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction71___action(val_t p0, val_t p1){
+void parser___ReduceAction72___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3137;
-  fra.me.meth = LOCATE_parser___ReduceAction71___action;
+  fra.me.line = 3191;
+  fra.me.meth = LOCATE_parser___ReduceAction72___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -10857,69 +11094,69 @@ void parser___ReduceAction71___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3139 */
+  /* ./parser//parser.nit:3193 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3140 */
+  /* ./parser//parser.nit:3194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3141 */
+  /* ./parser//parser.nit:3195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3142 */
+  /* ./parser//parser.nit:3196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3143 */
+  /* ./parser//parser.nit:3197 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3144 */
+  /* ./parser//parser.nit:3198 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3145 */
+  /* ./parser//parser.nit:3199 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3146 */
+  /* ./parser//parser.nit:3200 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3147 */
+  /* ./parser//parser.nit:3201 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3149 */
+  /* ./parser//parser.nit:3203 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3203);
   }
-  /* ./parser//parser.nit:3151 */
+  /* ./parser//parser.nit:3205 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3205);
   }
-  /* ./parser//parser.nit:3153 */
+  /* ./parser//parser.nit:3207 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3207);
   }
-  /* ./parser//parser.nit:3155 */
+  /* ./parser//parser.nit:3209 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3209);
   }
-  /* ./parser//parser.nit:3157 */
+  /* ./parser//parser.nit:3211 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3211);
   }
-  /* ./parser//parser.nit:3159 */
+  /* ./parser//parser.nit:3213 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3213);
   }
-  /* ./parser//parser.nit:3160 */
+  /* ./parser//parser.nit:3214 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3169 */
+  /* ./parser//parser.nit:3223 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3170 */
+  /* ./parser//parser.nit:3224 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3170);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3224);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10927,14 +11164,14 @@ void parser___ReduceAction71___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction72___action(val_t p0, val_t p1){
+void parser___ReduceAction73___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3175;
-  fra.me.meth = LOCATE_parser___ReduceAction72___action;
+  fra.me.line = 3229;
+  fra.me.meth = LOCATE_parser___ReduceAction73___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -10949,77 +11186,77 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3177 */
+  /* ./parser//parser.nit:3231 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3178 */
+  /* ./parser//parser.nit:3232 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3179 */
+  /* ./parser//parser.nit:3233 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3180 */
+  /* ./parser//parser.nit:3234 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3181 */
+  /* ./parser//parser.nit:3235 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3182 */
+  /* ./parser//parser.nit:3236 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3183 */
+  /* ./parser//parser.nit:3237 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3184 */
+  /* ./parser//parser.nit:3238 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3185 */
+  /* ./parser//parser.nit:3239 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3186 */
+  /* ./parser//parser.nit:3240 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3188 */
+  /* ./parser//parser.nit:3242 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3242);
   }
-  /* ./parser//parser.nit:3190 */
+  /* ./parser//parser.nit:3244 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3244);
   }
-  /* ./parser//parser.nit:3192 */
+  /* ./parser//parser.nit:3246 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3246);
   }
-  /* ./parser//parser.nit:3194 */
+  /* ./parser//parser.nit:3248 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3194);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3248);
   }
-  /* ./parser//parser.nit:3196 */
+  /* ./parser//parser.nit:3250 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3196);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3250);
   }
-  /* ./parser//parser.nit:3198 */
+  /* ./parser//parser.nit:3252 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3252);
   }
-  /* ./parser//parser.nit:3200 */
+  /* ./parser//parser.nit:3254 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3200);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3254);
   }
-  /* ./parser//parser.nit:3201 */
+  /* ./parser//parser.nit:3255 */
   fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3210 */
+  /* ./parser//parser.nit:3264 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3211 */
+  /* ./parser//parser.nit:3265 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3211);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3265);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11027,14 +11264,14 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction73___action(val_t p0, val_t p1){
+void parser___ReduceAction74___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3216;
-  fra.me.meth = LOCATE_parser___ReduceAction73___action;
+  fra.me.line = 3270;
+  fra.me.meth = LOCATE_parser___ReduceAction74___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -11047,61 +11284,61 @@ void parser___ReduceAction73___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3218 */
+  /* ./parser//parser.nit:3272 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3219 */
+  /* ./parser//parser.nit:3273 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3220 */
+  /* ./parser//parser.nit:3274 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3221 */
+  /* ./parser//parser.nit:3275 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3222 */
+  /* ./parser//parser.nit:3276 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3223 */
+  /* ./parser//parser.nit:3277 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3224 */
+  /* ./parser//parser.nit:3278 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3225 */
+  /* ./parser//parser.nit:3279 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3227 */
+  /* ./parser//parser.nit:3281 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3281);
   }
-  /* ./parser//parser.nit:3229 */
+  /* ./parser//parser.nit:3283 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3283);
   }
-  /* ./parser//parser.nit:3231 */
+  /* ./parser//parser.nit:3285 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3285);
   }
-  /* ./parser//parser.nit:3233 */
+  /* ./parser//parser.nit:3287 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3287);
   }
-  /* ./parser//parser.nit:3235 */
+  /* ./parser//parser.nit:3289 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3289);
   }
-  /* ./parser//parser.nit:3236 */
+  /* ./parser//parser.nit:3290 */
   fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3244 */
+  /* ./parser//parser.nit:3298 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3245 */
+  /* ./parser//parser.nit:3299 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3245);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3299);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11109,14 +11346,14 @@ void parser___ReduceAction73___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction74___action(val_t p0, val_t p1){
+void parser___ReduceAction75___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3250;
-  fra.me.meth = LOCATE_parser___ReduceAction74___action;
+  fra.me.line = 3304;
+  fra.me.meth = LOCATE_parser___ReduceAction75___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -11130,69 +11367,69 @@ void parser___ReduceAction74___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3252 */
+  /* ./parser//parser.nit:3306 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3253 */
+  /* ./parser//parser.nit:3307 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3254 */
+  /* ./parser//parser.nit:3308 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3255 */
+  /* ./parser//parser.nit:3309 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3256 */
+  /* ./parser//parser.nit:3310 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3257 */
+  /* ./parser//parser.nit:3311 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3258 */
+  /* ./parser//parser.nit:3312 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3259 */
+  /* ./parser//parser.nit:3313 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3260 */
+  /* ./parser//parser.nit:3314 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3262 */
+  /* ./parser//parser.nit:3316 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3316);
   }
-  /* ./parser//parser.nit:3264 */
+  /* ./parser//parser.nit:3318 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3264);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3318);
   }
-  /* ./parser//parser.nit:3266 */
+  /* ./parser//parser.nit:3320 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3266);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3320);
   }
-  /* ./parser//parser.nit:3268 */
+  /* ./parser//parser.nit:3322 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3268);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3322);
   }
-  /* ./parser//parser.nit:3270 */
+  /* ./parser//parser.nit:3324 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3270);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3324);
   }
-  /* ./parser//parser.nit:3272 */
+  /* ./parser//parser.nit:3326 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3272);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3326);
   }
-  /* ./parser//parser.nit:3273 */
+  /* ./parser//parser.nit:3327 */
   fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3281 */
+  /* ./parser//parser.nit:3335 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3282 */
+  /* ./parser//parser.nit:3336 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3282);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3336);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11200,14 +11437,14 @@ void parser___ReduceAction74___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction75___action(val_t p0, val_t p1){
+void parser___ReduceAction76___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3287;
-  fra.me.meth = LOCATE_parser___ReduceAction75___action;
+  fra.me.line = 3341;
+  fra.me.meth = LOCATE_parser___ReduceAction76___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -11220,61 +11457,61 @@ void parser___ReduceAction75___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3289 */
+  /* ./parser//parser.nit:3343 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3290 */
+  /* ./parser//parser.nit:3344 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3291 */
+  /* ./parser//parser.nit:3345 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3292 */
+  /* ./parser//parser.nit:3346 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3293 */
+  /* ./parser//parser.nit:3347 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3294 */
+  /* ./parser//parser.nit:3348 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3295 */
+  /* ./parser//parser.nit:3349 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3296 */
+  /* ./parser//parser.nit:3350 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3298 */
+  /* ./parser//parser.nit:3352 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3298);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3352);
   }
-  /* ./parser//parser.nit:3300 */
+  /* ./parser//parser.nit:3354 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3300);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3354);
   }
-  /* ./parser//parser.nit:3302 */
+  /* ./parser//parser.nit:3356 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3302);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3356);
   }
-  /* ./parser//parser.nit:3304 */
+  /* ./parser//parser.nit:3358 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3358);
   }
-  /* ./parser//parser.nit:3306 */
+  /* ./parser//parser.nit:3360 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3360);
   }
-  /* ./parser//parser.nit:3307 */
+  /* ./parser//parser.nit:3361 */
   fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3315 */
+  /* ./parser//parser.nit:3369 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3316 */
+  /* ./parser//parser.nit:3370 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3316);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3370);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11282,14 +11519,14 @@ void parser___ReduceAction75___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction76___action(val_t p0, val_t p1){
+void parser___ReduceAction77___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3321;
-  fra.me.meth = LOCATE_parser___ReduceAction76___action;
+  fra.me.line = 3375;
+  fra.me.meth = LOCATE_parser___ReduceAction77___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -11303,69 +11540,69 @@ void parser___ReduceAction76___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3323 */
+  /* ./parser//parser.nit:3377 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3324 */
+  /* ./parser//parser.nit:3378 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3325 */
+  /* ./parser//parser.nit:3379 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3326 */
+  /* ./parser//parser.nit:3380 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3327 */
+  /* ./parser//parser.nit:3381 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3328 */
+  /* ./parser//parser.nit:3382 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3329 */
+  /* ./parser//parser.nit:3383 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3330 */
+  /* ./parser//parser.nit:3384 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3331 */
+  /* ./parser//parser.nit:3385 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3333 */
+  /* ./parser//parser.nit:3387 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3387);
   }
-  /* ./parser//parser.nit:3335 */
+  /* ./parser//parser.nit:3389 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3389);
   }
-  /* ./parser//parser.nit:3337 */
+  /* ./parser//parser.nit:3391 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3337);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3391);
   }
-  /* ./parser//parser.nit:3339 */
+  /* ./parser//parser.nit:3393 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3339);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3393);
   }
-  /* ./parser//parser.nit:3341 */
+  /* ./parser//parser.nit:3395 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3341);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3395);
   }
-  /* ./parser//parser.nit:3343 */
+  /* ./parser//parser.nit:3397 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3343);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3397);
   }
-  /* ./parser//parser.nit:3344 */
+  /* ./parser//parser.nit:3398 */
   fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3352 */
+  /* ./parser//parser.nit:3406 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3353 */
+  /* ./parser//parser.nit:3407 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3353);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3407);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11373,14 +11610,14 @@ void parser___ReduceAction76___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction77___action(val_t p0, val_t p1){
+void parser___ReduceAction78___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3358;
-  fra.me.meth = LOCATE_parser___ReduceAction77___action;
+  fra.me.line = 3412;
+  fra.me.meth = LOCATE_parser___ReduceAction78___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -11393,61 +11630,61 @@ void parser___ReduceAction77___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3360 */
+  /* ./parser//parser.nit:3414 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3361 */
+  /* ./parser//parser.nit:3415 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3362 */
+  /* ./parser//parser.nit:3416 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3363 */
+  /* ./parser//parser.nit:3417 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3364 */
+  /* ./parser//parser.nit:3418 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3365 */
+  /* ./parser//parser.nit:3419 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3366 */
+  /* ./parser//parser.nit:3420 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3367 */
+  /* ./parser//parser.nit:3421 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3369 */
+  /* ./parser//parser.nit:3423 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3369);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3423);
   }
-  /* ./parser//parser.nit:3371 */
+  /* ./parser//parser.nit:3425 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3425);
   }
-  /* ./parser//parser.nit:3373 */
+  /* ./parser//parser.nit:3427 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3427);
   }
-  /* ./parser//parser.nit:3375 */
+  /* ./parser//parser.nit:3429 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3429);
   }
-  /* ./parser//parser.nit:3377 */
+  /* ./parser//parser.nit:3431 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3431);
   }
-  /* ./parser//parser.nit:3378 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3387 */
+  /* ./parser//parser.nit:3432 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3442 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3388 */
+  /* ./parser//parser.nit:3443 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3388);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3443);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11455,14 +11692,14 @@ void parser___ReduceAction77___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction78___action(val_t p0, val_t p1){
+void parser___ReduceAction79___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3393;
-  fra.me.meth = LOCATE_parser___ReduceAction78___action;
+  fra.me.line = 3448;
+  fra.me.meth = LOCATE_parser___ReduceAction79___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -11476,69 +11713,69 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3395 */
+  /* ./parser//parser.nit:3450 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3396 */
+  /* ./parser//parser.nit:3451 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3397 */
+  /* ./parser//parser.nit:3452 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3398 */
+  /* ./parser//parser.nit:3453 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3399 */
+  /* ./parser//parser.nit:3454 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3400 */
+  /* ./parser//parser.nit:3455 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3401 */
+  /* ./parser//parser.nit:3456 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3402 */
+  /* ./parser//parser.nit:3457 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3403 */
+  /* ./parser//parser.nit:3458 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3405 */
+  /* ./parser//parser.nit:3460 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3460);
   }
-  /* ./parser//parser.nit:3407 */
+  /* ./parser//parser.nit:3462 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3407);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3462);
   }
-  /* ./parser//parser.nit:3409 */
+  /* ./parser//parser.nit:3464 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3464);
   }
-  /* ./parser//parser.nit:3411 */
+  /* ./parser//parser.nit:3466 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3466);
   }
-  /* ./parser//parser.nit:3413 */
+  /* ./parser//parser.nit:3468 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3468);
   }
-  /* ./parser//parser.nit:3415 */
+  /* ./parser//parser.nit:3470 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3470);
   }
-  /* ./parser//parser.nit:3416 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3425 */
+  /* ./parser//parser.nit:3471 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3481 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3426 */
+  /* ./parser//parser.nit:3482 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3426);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3482);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11546,14 +11783,14 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction79___action(val_t p0, val_t p1){
+void parser___ReduceAction80___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3431;
-  fra.me.meth = LOCATE_parser___ReduceAction79___action;
+  fra.me.line = 3487;
+  fra.me.meth = LOCATE_parser___ReduceAction80___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -11567,69 +11804,69 @@ void parser___ReduceAction79___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3433 */
+  /* ./parser//parser.nit:3489 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3434 */
+  /* ./parser//parser.nit:3490 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3435 */
+  /* ./parser//parser.nit:3491 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3436 */
+  /* ./parser//parser.nit:3492 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3437 */
+  /* ./parser//parser.nit:3493 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3438 */
+  /* ./parser//parser.nit:3494 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3439 */
+  /* ./parser//parser.nit:3495 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3440 */
+  /* ./parser//parser.nit:3496 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3441 */
+  /* ./parser//parser.nit:3497 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3443 */
+  /* ./parser//parser.nit:3499 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3499);
   }
-  /* ./parser//parser.nit:3445 */
+  /* ./parser//parser.nit:3501 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3501);
   }
-  /* ./parser//parser.nit:3447 */
+  /* ./parser//parser.nit:3503 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3503);
   }
-  /* ./parser//parser.nit:3449 */
+  /* ./parser//parser.nit:3505 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3449);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3505);
   }
-  /* ./parser//parser.nit:3451 */
+  /* ./parser//parser.nit:3507 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3451);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3507);
   }
-  /* ./parser//parser.nit:3453 */
+  /* ./parser//parser.nit:3509 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3509);
   }
-  /* ./parser//parser.nit:3454 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3463 */
+  /* ./parser//parser.nit:3510 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3520 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3464 */
+  /* ./parser//parser.nit:3521 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3464);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3521);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11637,14 +11874,14 @@ void parser___ReduceAction79___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction80___action(val_t p0, val_t p1){
+void parser___ReduceAction81___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3469;
-  fra.me.meth = LOCATE_parser___ReduceAction80___action;
+  fra.me.line = 3526;
+  fra.me.meth = LOCATE_parser___ReduceAction81___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -11659,77 +11896,77 @@ void parser___ReduceAction80___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3471 */
+  /* ./parser//parser.nit:3528 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3472 */
+  /* ./parser//parser.nit:3529 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3473 */
+  /* ./parser//parser.nit:3530 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3474 */
+  /* ./parser//parser.nit:3531 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3475 */
+  /* ./parser//parser.nit:3532 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3476 */
+  /* ./parser//parser.nit:3533 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3477 */
+  /* ./parser//parser.nit:3534 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3478 */
+  /* ./parser//parser.nit:3535 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3479 */
+  /* ./parser//parser.nit:3536 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3480 */
+  /* ./parser//parser.nit:3537 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3482 */
+  /* ./parser//parser.nit:3539 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3539);
   }
-  /* ./parser//parser.nit:3484 */
+  /* ./parser//parser.nit:3541 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3484);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3541);
   }
-  /* ./parser//parser.nit:3486 */
+  /* ./parser//parser.nit:3543 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3543);
   }
-  /* ./parser//parser.nit:3488 */
+  /* ./parser//parser.nit:3545 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3545);
   }
-  /* ./parser//parser.nit:3490 */
+  /* ./parser//parser.nit:3547 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3547);
   }
-  /* ./parser//parser.nit:3492 */
+  /* ./parser//parser.nit:3549 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3549);
   }
-  /* ./parser//parser.nit:3494 */
+  /* ./parser//parser.nit:3551 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3494);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3551);
   }
-  /* ./parser//parser.nit:3495 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3504 */
+  /* ./parser//parser.nit:3552 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:3562 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3505 */
+  /* ./parser//parser.nit:3563 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3563);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11737,16 +11974,16 @@ void parser___ReduceAction80___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction81___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction82___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3510;
-  fra.me.meth = LOCATE_parser___ReduceAction81___action;
+  fra.me.line = 3568;
+  fra.me.meth = LOCATE_parser___ReduceAction82___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;
@@ -11754,51 +11991,73 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3512 */
+  /* ./parser//parser.nit:3570 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3513 */
+  /* ./parser//parser.nit:3571 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3514 */
+  /* ./parser//parser.nit:3572 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3573 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3574 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3515 */
+  /* ./parser//parser.nit:3575 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3516 */
+  /* ./parser//parser.nit:3576 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3518 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3577 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3578 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3580 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3580);
   }
-  /* ./parser//parser.nit:3520 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3582 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3520);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3582);
   }
-  /* ./parser//parser.nit:3522 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3584 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3522);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3584);
   }
-  /* ./parser//parser.nit:3524 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3586 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3524);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3586);
   }
-  /* ./parser//parser.nit:3525 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3537 */
+  /* ./parser//parser.nit:3588 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3588);
+  }
+  /* ./parser//parser.nit:3590 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3590);
+  }
+  /* ./parser//parser.nit:3591 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:3601 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3538 */
+  /* ./parser//parser.nit:3602 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3538);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3602);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11806,16 +12065,16 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction82___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction83___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3543;
-  fra.me.meth = LOCATE_parser___ReduceAction82___action;
+  fra.me.line = 3607;
+  fra.me.meth = LOCATE_parser___ReduceAction83___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;
@@ -11824,76 +12083,98 @@ void parser___ReduceAction82___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;
-  /* ./parser//parser.nit:3545 */
+  /* ./parser//parser.nit:3609 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3546 */
+  /* ./parser//parser.nit:3610 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3547 */
+  /* ./parser//parser.nit:3611 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3548 */
+  /* ./parser//parser.nit:3612 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3613 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3614 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3549 */
+  /* ./parser//parser.nit:3615 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3550 */
+  /* ./parser//parser.nit:3616 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3552 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3617 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3618 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3620 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3620);
   }
-  /* ./parser//parser.nit:3554 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3622 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3622);
   }
-  /* ./parser//parser.nit:3556 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3624 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3624);
   }
-  /* ./parser//parser.nit:3558 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3626 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3626);
   }
-  /* ./parser//parser.nit:3560 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3628 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3628);
   }
-  /* ./parser//parser.nit:3561 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3573 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3574 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:3630 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3630);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  /* ./parser//parser.nit:3632 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3632);
+  }
+  /* ./parser//parser.nit:3633 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:3643 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:3644 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3644);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction83___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction84___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3579;
-  fra.me.meth = LOCATE_parser___ReduceAction83___action;
+  fra.me.line = 3649;
+  fra.me.meth = LOCATE_parser___ReduceAction84___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;
@@ -11902,59 +12183,81 @@ void parser___ReduceAction83___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;
-  /* ./parser//parser.nit:3581 */
+  /* ./parser//parser.nit:3651 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3582 */
+  /* ./parser//parser.nit:3652 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3583 */
+  /* ./parser//parser.nit:3653 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3584 */
+  /* ./parser//parser.nit:3654 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3655 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3585 */
+  /* ./parser//parser.nit:3656 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3657 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3586 */
+  /* ./parser//parser.nit:3658 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3588 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3659 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3660 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3662 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3662);
   }
-  /* ./parser//parser.nit:3590 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3664 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3664);
   }
-  /* ./parser//parser.nit:3592 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3666 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3592);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3666);
   }
-  /* ./parser//parser.nit:3594 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3668 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3668);
   }
-  /* ./parser//parser.nit:3596 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3670 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3596);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3670);
   }
-  /* ./parser//parser.nit:3597 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3609 */
+  /* ./parser//parser.nit:3672 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3672);
+  }
+  /* ./parser//parser.nit:3674 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3674);
+  }
+  /* ./parser//parser.nit:3675 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3685 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3610 */
+  /* ./parser//parser.nit:3686 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3610);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3686);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11962,16 +12265,16 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction84___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction85___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3615;
-  fra.me.meth = LOCATE_parser___ReduceAction84___action;
+  fra.me.line = 3691;
+  fra.me.meth = LOCATE_parser___ReduceAction85___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;
@@ -11981,67 +12284,89 @@ void parser___ReduceAction84___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;
-  /* ./parser//parser.nit:3617 */
+  /* ./parser//parser.nit:3693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3618 */
+  /* ./parser//parser.nit:3694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3619 */
+  /* ./parser//parser.nit:3695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3620 */
+  /* ./parser//parser.nit:3696 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3621 */
+  /* ./parser//parser.nit:3697 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3698 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3699 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3622 */
+  /* ./parser//parser.nit:3700 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3623 */
+  /* ./parser//parser.nit:3701 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3625 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:3702 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3703 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:3705 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3705);
   }
-  /* ./parser//parser.nit:3627 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3707 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3707);
   }
-  /* ./parser//parser.nit:3629 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3709 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3709);
   }
-  /* ./parser//parser.nit:3631 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3711 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3711);
   }
-  /* ./parser//parser.nit:3633 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3713 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3633);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3713);
   }
-  /* ./parser//parser.nit:3635 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3715 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3715);
   }
-  /* ./parser//parser.nit:3636 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3648 */
+  /* ./parser//parser.nit:3717 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3717);
+  }
+  /* ./parser//parser.nit:3719 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3719);
+  }
+  /* ./parser//parser.nit:3720 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:3730 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3649 */
+  /* ./parser//parser.nit:3731 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3649);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3731);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12049,16 +12374,16 @@ void parser___ReduceAction84___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction85___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction86___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3654;
-  fra.me.meth = LOCATE_parser___ReduceAction85___action;
+  fra.me.line = 3736;
+  fra.me.meth = LOCATE_parser___ReduceAction86___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;
@@ -12066,60 +12391,51 @@ void parser___ReduceAction85___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3656 */
+  /* ./parser//parser.nit:3738 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3657 */
+  /* ./parser//parser.nit:3739 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3658 */
+  /* ./parser//parser.nit:3740 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3659 */
+  /* ./parser//parser.nit:3741 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3660 */
+  /* ./parser//parser.nit:3742 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3661 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3663 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3663);
-  }
-  /* ./parser//parser.nit:3665 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3744 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3744);
   }
-  /* ./parser//parser.nit:3667 */
+  /* ./parser//parser.nit:3746 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3667);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3746);
   }
-  /* ./parser//parser.nit:3669 */
+  /* ./parser//parser.nit:3748 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3748);
   }
-  /* ./parser//parser.nit:3671 */
+  /* ./parser//parser.nit:3750 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3750);
   }
-  /* ./parser//parser.nit:3672 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3684 */
+  /* ./parser//parser.nit:3751 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3763 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3685 */
+  /* ./parser//parser.nit:3764 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3685);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3764);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12127,16 +12443,16 @@ void parser___ReduceAction85___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction86___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction87___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3690;
-  fra.me.meth = LOCATE_parser___ReduceAction86___action;
+  fra.me.line = 3769;
+  fra.me.meth = LOCATE_parser___ReduceAction87___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;
@@ -12145,68 +12461,59 @@ void parser___ReduceAction86___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3692 */
+  /* ./parser//parser.nit:3771 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3693 */
+  /* ./parser//parser.nit:3772 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3694 */
+  /* ./parser//parser.nit:3773 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3695 */
+  /* ./parser//parser.nit:3774 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3696 */
+  /* ./parser//parser.nit:3775 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3697 */
+  /* ./parser//parser.nit:3776 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3698 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3700 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3700);
-  }
-  /* ./parser//parser.nit:3702 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3778 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3778);
   }
-  /* ./parser//parser.nit:3704 */
+  /* ./parser//parser.nit:3780 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3780);
   }
-  /* ./parser//parser.nit:3706 */
+  /* ./parser//parser.nit:3782 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3782);
   }
-  /* ./parser//parser.nit:3708 */
+  /* ./parser//parser.nit:3784 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3708);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3784);
   }
-  /* ./parser//parser.nit:3710 */
+  /* ./parser//parser.nit:3786 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3786);
   }
-  /* ./parser//parser.nit:3711 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3723 */
+  /* ./parser//parser.nit:3787 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3799 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3724 */
+  /* ./parser//parser.nit:3800 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3724);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3800);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12214,16 +12521,16 @@ void parser___ReduceAction86___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction87___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction88___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3729;
-  fra.me.meth = LOCATE_parser___ReduceAction87___action;
+  fra.me.line = 3805;
+  fra.me.meth = LOCATE_parser___ReduceAction88___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;
@@ -12232,68 +12539,59 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3731 */
+  /* ./parser//parser.nit:3807 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3732 */
+  /* ./parser//parser.nit:3808 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3733 */
+  /* ./parser//parser.nit:3809 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3734 */
+  /* ./parser//parser.nit:3810 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3735 */
+  /* ./parser//parser.nit:3811 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3736 */
+  /* ./parser//parser.nit:3812 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3737 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3739 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3739);
-  }
-  /* ./parser//parser.nit:3741 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3814 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3814);
   }
-  /* ./parser//parser.nit:3743 */
+  /* ./parser//parser.nit:3816 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3816);
   }
-  /* ./parser//parser.nit:3745 */
+  /* ./parser//parser.nit:3818 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3745);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3818);
   }
-  /* ./parser//parser.nit:3747 */
+  /* ./parser//parser.nit:3820 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3820);
   }
-  /* ./parser//parser.nit:3749 */
+  /* ./parser//parser.nit:3822 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3822);
   }
-  /* ./parser//parser.nit:3750 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3762 */
+  /* ./parser//parser.nit:3823 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3835 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3763 */
+  /* ./parser//parser.nit:3836 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3763);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3836);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12301,16 +12599,16 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction88___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction89___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3768;
-  fra.me.meth = LOCATE_parser___ReduceAction88___action;
+  fra.me.line = 3841;
+  fra.me.meth = LOCATE_parser___ReduceAction89___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;
@@ -12320,76 +12618,67 @@ void parser___ReduceAction88___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3770 */
+  /* ./parser//parser.nit:3843 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3771 */
+  /* ./parser//parser.nit:3844 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3772 */
+  /* ./parser//parser.nit:3845 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3773 */
+  /* ./parser//parser.nit:3846 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3774 */
+  /* ./parser//parser.nit:3847 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3775 */
+  /* ./parser//parser.nit:3848 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3776 */
+  /* ./parser//parser.nit:3849 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3777 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3779 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3779);
-  }
-  /* ./parser//parser.nit:3781 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:3851 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3781);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3851);
   }
-  /* ./parser//parser.nit:3783 */
+  /* ./parser//parser.nit:3853 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3853);
   }
-  /* ./parser//parser.nit:3785 */
+  /* ./parser//parser.nit:3855 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3855);
   }
-  /* ./parser//parser.nit:3787 */
+  /* ./parser//parser.nit:3857 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3857);
   }
-  /* ./parser//parser.nit:3789 */
+  /* ./parser//parser.nit:3859 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3859);
   }
-  /* ./parser//parser.nit:3791 */
+  /* ./parser//parser.nit:3861 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3791);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3861);
   }
-  /* ./parser//parser.nit:3792 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3804 */
+  /* ./parser//parser.nit:3862 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3874 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3805 */
+  /* ./parser//parser.nit:3875 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3805);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3875);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12397,14 +12686,14 @@ void parser___ReduceAction88___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction89___action(val_t p0, val_t p1){
+void parser___ReduceAction90___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3810;
-  fra.me.meth = LOCATE_parser___ReduceAction89___action;
+  fra.me.line = 3880;
+  fra.me.meth = LOCATE_parser___ReduceAction90___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -12417,57 +12706,57 @@ void parser___ReduceAction89___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3812 */
+  /* ./parser//parser.nit:3882 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3813 */
+  /* ./parser//parser.nit:3883 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3814 */
+  /* ./parser//parser.nit:3884 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3815 */
+  /* ./parser//parser.nit:3885 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3816 */
+  /* ./parser//parser.nit:3886 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3817 */
+  /* ./parser//parser.nit:3887 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3819 */
+  /* ./parser//parser.nit:3889 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3889);
   }
-  /* ./parser//parser.nit:3821 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3891 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3891);
   }
-  /* ./parser//parser.nit:3823 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3893 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3893);
   }
-  /* ./parser//parser.nit:3825 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3895 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3895);
   }
-  /* ./parser//parser.nit:3827 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:3897 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3897);
   }
-  /* ./parser//parser.nit:3828 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3840 */
+  /* ./parser//parser.nit:3898 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3910 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3841 */
+  /* ./parser//parser.nit:3911 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3911);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12475,14 +12764,14 @@ void parser___ReduceAction89___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction90___action(val_t p0, val_t p1){
+void parser___ReduceAction91___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3846;
-  fra.me.meth = LOCATE_parser___ReduceAction90___action;
+  fra.me.line = 3916;
+  fra.me.meth = LOCATE_parser___ReduceAction91___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -12496,65 +12785,65 @@ void parser___ReduceAction90___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3848 */
+  /* ./parser//parser.nit:3918 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3849 */
+  /* ./parser//parser.nit:3919 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3850 */
+  /* ./parser//parser.nit:3920 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3851 */
+  /* ./parser//parser.nit:3921 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3852 */
+  /* ./parser//parser.nit:3922 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3853 */
+  /* ./parser//parser.nit:3923 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3854 */
+  /* ./parser//parser.nit:3924 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3856 */
+  /* ./parser//parser.nit:3926 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3926);
   }
-  /* ./parser//parser.nit:3858 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:3928 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3928);
   }
-  /* ./parser//parser.nit:3860 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3930 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3930);
   }
-  /* ./parser//parser.nit:3862 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3932 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3932);
   }
-  /* ./parser//parser.nit:3864 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3934 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3934);
   }
-  /* ./parser//parser.nit:3866 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:3936 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3936);
   }
-  /* ./parser//parser.nit:3867 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3879 */
+  /* ./parser//parser.nit:3937 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3949 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3880 */
+  /* ./parser//parser.nit:3950 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3880);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3950);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12562,14 +12851,14 @@ void parser___ReduceAction90___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction91___action(val_t p0, val_t p1){
+void parser___ReduceAction92___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3885;
-  fra.me.meth = LOCATE_parser___ReduceAction91___action;
+  fra.me.line = 3955;
+  fra.me.meth = LOCATE_parser___ReduceAction92___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -12583,65 +12872,65 @@ void parser___ReduceAction91___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3887 */
+  /* ./parser//parser.nit:3957 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3888 */
+  /* ./parser//parser.nit:3958 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3889 */
+  /* ./parser//parser.nit:3959 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3890 */
+  /* ./parser//parser.nit:3960 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3891 */
+  /* ./parser//parser.nit:3961 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3892 */
+  /* ./parser//parser.nit:3962 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3893 */
+  /* ./parser//parser.nit:3963 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3895 */
+  /* ./parser//parser.nit:3965 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3965);
   }
-  /* ./parser//parser.nit:3897 */
+  /* ./parser//parser.nit:3967 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3967);
   }
-  /* ./parser//parser.nit:3899 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:3969 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3899);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3969);
   }
-  /* ./parser//parser.nit:3901 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:3971 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3901);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3971);
   }
-  /* ./parser//parser.nit:3903 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:3973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3903);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3973);
   }
-  /* ./parser//parser.nit:3905 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:3975 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3975);
   }
-  /* ./parser//parser.nit:3906 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3918 */
+  /* ./parser//parser.nit:3976 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:3988 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3919 */
+  /* ./parser//parser.nit:3989 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3919);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3989);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12649,14 +12938,14 @@ void parser___ReduceAction91___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction92___action(val_t p0, val_t p1){
+void parser___ReduceAction93___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3924;
-  fra.me.meth = LOCATE_parser___ReduceAction92___action;
+  fra.me.line = 3994;
+  fra.me.meth = LOCATE_parser___ReduceAction93___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -12671,73 +12960,73 @@ void parser___ReduceAction92___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3926 */
+  /* ./parser//parser.nit:3996 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3927 */
+  /* ./parser//parser.nit:3997 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3928 */
+  /* ./parser//parser.nit:3998 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3929 */
+  /* ./parser//parser.nit:3999 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3930 */
+  /* ./parser//parser.nit:4000 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3931 */
+  /* ./parser//parser.nit:4001 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3932 */
+  /* ./parser//parser.nit:4002 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3933 */
+  /* ./parser//parser.nit:4003 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3935 */
+  /* ./parser//parser.nit:4005 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4005);
   }
-  /* ./parser//parser.nit:3937 */
+  /* ./parser//parser.nit:4007 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3937);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4007);
   }
-  /* ./parser//parser.nit:3939 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4009 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3939);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4009);
   }
-  /* ./parser//parser.nit:3941 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4011 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3941);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4011);
   }
-  /* ./parser//parser.nit:3943 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4013 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3943);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4013);
   }
-  /* ./parser//parser.nit:3945 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4015 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4015);
   }
-  /* ./parser//parser.nit:3947 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4017 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3947);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4017);
   }
-  /* ./parser//parser.nit:3948 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3960 */
+  /* ./parser//parser.nit:4018 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:4030 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3961 */
+  /* ./parser//parser.nit:4031 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3961);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4031);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12745,16 +13034,16 @@ void parser___ReduceAction92___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction93___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+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 = 3966;
-  fra.me.meth = LOCATE_parser___ReduceAction93___action;
+  fra.me.line = 4036;
+  fra.me.meth = LOCATE_parser___ReduceAction94___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;
@@ -12763,68 +13052,59 @@ void parser___ReduceAction93___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3968 */
+  /* ./parser//parser.nit:4038 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3969 */
+  /* ./parser//parser.nit:4039 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3970 */
+  /* ./parser//parser.nit:4040 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3971 */
+  /* ./parser//parser.nit:4041 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3972 */
+  /* ./parser//parser.nit:4042 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3973 */
+  /* ./parser//parser.nit:4043 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3974 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3976 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3976);
-  }
-  /* ./parser//parser.nit:3978 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4045 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4045);
   }
-  /* ./parser//parser.nit:3980 */
+  /* ./parser//parser.nit:4047 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4047);
   }
-  /* ./parser//parser.nit:3982 */
+  /* ./parser//parser.nit:4049 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3982);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4049);
   }
-  /* ./parser//parser.nit:3984 */
+  /* ./parser//parser.nit:4051 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3984);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4051);
   }
-  /* ./parser//parser.nit:3986 */
+  /* ./parser//parser.nit:4053 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3986);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4053);
   }
-  /* ./parser//parser.nit:3987 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3999 */
+  /* ./parser//parser.nit:4054 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4066 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4000 */
+  /* ./parser//parser.nit:4067 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4000);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4067);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12832,16 +13112,16 @@ void parser___ReduceAction93___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction94___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction95___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4005;
-  fra.me.meth = LOCATE_parser___ReduceAction94___action;
+  fra.me.line = 4072;
+  fra.me.meth = LOCATE_parser___ReduceAction95___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;
@@ -12851,76 +13131,67 @@ void parser___ReduceAction94___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4007 */
+  /* ./parser//parser.nit:4074 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4008 */
+  /* ./parser//parser.nit:4075 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4009 */
+  /* ./parser//parser.nit:4076 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4010 */
+  /* ./parser//parser.nit:4077 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4011 */
+  /* ./parser//parser.nit:4078 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4012 */
+  /* ./parser//parser.nit:4079 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4013 */
+  /* ./parser//parser.nit:4080 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4014 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4016 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4016);
-  }
-  /* ./parser//parser.nit:4018 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4082 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4082);
   }
-  /* ./parser//parser.nit:4020 */
+  /* ./parser//parser.nit:4084 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4084);
   }
-  /* ./parser//parser.nit:4022 */
+  /* ./parser//parser.nit:4086 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4086);
   }
-  /* ./parser//parser.nit:4024 */
+  /* ./parser//parser.nit:4088 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4088);
   }
-  /* ./parser//parser.nit:4026 */
+  /* ./parser//parser.nit:4090 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4090);
   }
-  /* ./parser//parser.nit:4028 */
+  /* ./parser//parser.nit:4092 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4092);
   }
-  /* ./parser//parser.nit:4029 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4041 */
+  /* ./parser//parser.nit:4093 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4105 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4042 */
+  /* ./parser//parser.nit:4106 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4042);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4106);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12928,16 +13199,16 @@ void parser___ReduceAction94___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction95___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction96___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4047;
-  fra.me.meth = LOCATE_parser___ReduceAction95___action;
+  fra.me.line = 4111;
+  fra.me.meth = LOCATE_parser___ReduceAction96___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;
@@ -12947,76 +13218,67 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4049 */
+  /* ./parser//parser.nit:4113 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4050 */
+  /* ./parser//parser.nit:4114 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4051 */
+  /* ./parser//parser.nit:4115 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4052 */
+  /* ./parser//parser.nit:4116 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4053 */
+  /* ./parser//parser.nit:4117 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4054 */
+  /* ./parser//parser.nit:4118 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4055 */
+  /* ./parser//parser.nit:4119 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4056 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4058 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4058);
-  }
-  /* ./parser//parser.nit:4060 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4121 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4121);
   }
-  /* ./parser//parser.nit:4062 */
+  /* ./parser//parser.nit:4123 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4123);
   }
-  /* ./parser//parser.nit:4064 */
+  /* ./parser//parser.nit:4125 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4064);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4125);
   }
-  /* ./parser//parser.nit:4066 */
+  /* ./parser//parser.nit:4127 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4066);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4127);
   }
-  /* ./parser//parser.nit:4068 */
+  /* ./parser//parser.nit:4129 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4068);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4129);
   }
-  /* ./parser//parser.nit:4070 */
+  /* ./parser//parser.nit:4131 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4131);
   }
-  /* ./parser//parser.nit:4071 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4083 */
+  /* ./parser//parser.nit:4132 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4144 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4084 */
+  /* ./parser//parser.nit:4145 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4084);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4145);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13024,16 +13286,16 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction96___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+void parser___ReduceAction97___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4089;
-  fra.me.meth = LOCATE_parser___ReduceAction96___action;
+  fra.me.line = 4150;
+  fra.me.meth = LOCATE_parser___ReduceAction97___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13044,84 +13306,75 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4091 */
+  /* ./parser//parser.nit:4152 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4092 */
+  /* ./parser//parser.nit:4153 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4093 */
+  /* ./parser//parser.nit:4154 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4094 */
+  /* ./parser//parser.nit:4155 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4095 */
+  /* ./parser//parser.nit:4156 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4096 */
+  /* ./parser//parser.nit:4157 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4097 */
+  /* ./parser//parser.nit:4158 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4098 */
+  /* ./parser//parser.nit:4159 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4099 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4101 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4101);
-  }
-  /* ./parser//parser.nit:4103 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4161 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4161);
   }
-  /* ./parser//parser.nit:4105 */
+  /* ./parser//parser.nit:4163 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4163);
   }
-  /* ./parser//parser.nit:4107 */
+  /* ./parser//parser.nit:4165 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4165);
   }
-  /* ./parser//parser.nit:4109 */
+  /* ./parser//parser.nit:4167 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4109);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4167);
   }
-  /* ./parser//parser.nit:4111 */
+  /* ./parser//parser.nit:4169 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4169);
   }
-  /* ./parser//parser.nit:4113 */
+  /* ./parser//parser.nit:4171 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4171);
   }
-  /* ./parser//parser.nit:4115 */
+  /* ./parser//parser.nit:4173 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4173);
   }
-  /* ./parser//parser.nit:4116 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4128 */
+  /* ./parser//parser.nit:4174 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4186 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4129 */
+  /* ./parser//parser.nit:4187 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4129);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4187);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13129,16 +13382,16 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction97___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} 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 = 4134;
-  fra.me.meth = LOCATE_parser___ReduceAction97___action;
+  fra.me.line = 4192;
+  fra.me.meth = LOCATE_parser___ReduceAction98___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;
@@ -13147,63 +13400,68 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4136 */
+  /* ./parser//parser.nit:4194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4137 */
+  /* ./parser//parser.nit:4195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4138 */
+  /* ./parser//parser.nit:4196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4139 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4140 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4141 */
+  /* ./parser//parser.nit:4197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4142 */
+  /* ./parser//parser.nit:4198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4143 */
+  /* ./parser//parser.nit:4199 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4145 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4200 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4202 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4202);
+  }
+  /* ./parser//parser.nit:4204 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4204);
   }
-  /* ./parser//parser.nit:4147 */
+  /* ./parser//parser.nit:4206 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4147);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4206);
   }
-  /* ./parser//parser.nit:4149 */
+  /* ./parser//parser.nit:4208 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4208);
   }
-  /* ./parser//parser.nit:4151 */
+  /* ./parser//parser.nit:4210 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4210);
   }
-  /* ./parser//parser.nit:4153 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:4212 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4212);
   }
-  /* ./parser//parser.nit:4154 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4166 */
+  /* ./parser//parser.nit:4213 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4225 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4167 */
+  /* ./parser//parser.nit:4226 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4167);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4226);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13211,16 +13469,16 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction98___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction99___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4172;
-  fra.me.meth = LOCATE_parser___ReduceAction98___action;
+  fra.me.line = 4231;
+  fra.me.meth = LOCATE_parser___ReduceAction99___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;
@@ -13230,71 +13488,76 @@ void parser___ReduceAction98___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4174 */
+  /* ./parser//parser.nit:4233 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4175 */
+  /* ./parser//parser.nit:4234 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4176 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4177 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4178 */
+  /* ./parser//parser.nit:4235 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4179 */
+  /* ./parser//parser.nit:4236 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4180 */
+  /* ./parser//parser.nit:4237 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4181 */
+  /* ./parser//parser.nit:4238 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4182 */
+  /* ./parser//parser.nit:4239 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4184 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4240 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4242 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4184);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4242);
   }
-  /* ./parser//parser.nit:4186 */
+  /* ./parser//parser.nit:4244 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4244);
+  }
+  /* ./parser//parser.nit:4246 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4186);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4246);
   }
-  /* ./parser//parser.nit:4188 */
+  /* ./parser//parser.nit:4248 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4248);
   }
-  /* ./parser//parser.nit:4190 */
+  /* ./parser//parser.nit:4250 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4250);
   }
-  /* ./parser//parser.nit:4192 */
+  /* ./parser//parser.nit:4252 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4252);
   }
-  /* ./parser//parser.nit:4194 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:4254 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4194);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4254);
   }
-  /* ./parser//parser.nit:4195 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4207 */
+  /* ./parser//parser.nit:4255 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4267 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4208 */
+  /* ./parser//parser.nit:4268 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4208);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4268);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13302,16 +13565,16 @@ void parser___ReduceAction98___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction99___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} 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 = 4213;
-  fra.me.meth = LOCATE_parser___ReduceAction99___action;
+  fra.me.line = 4273;
+  fra.me.meth = LOCATE_parser___ReduceAction100___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;
@@ -13321,71 +13584,76 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4215 */
+  /* ./parser//parser.nit:4275 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4216 */
+  /* ./parser//parser.nit:4276 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4217 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4218 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4219 */
+  /* ./parser//parser.nit:4277 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4220 */
+  /* ./parser//parser.nit:4278 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4221 */
+  /* ./parser//parser.nit:4279 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4222 */
+  /* ./parser//parser.nit:4280 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4223 */
+  /* ./parser//parser.nit:4281 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4225 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4282 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4284 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4284);
+  }
+  /* ./parser//parser.nit:4286 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4225);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4286);
   }
-  /* ./parser//parser.nit:4227 */
+  /* ./parser//parser.nit:4288 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4288);
   }
-  /* ./parser//parser.nit:4229 */
+  /* ./parser//parser.nit:4290 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4290);
   }
-  /* ./parser//parser.nit:4231 */
+  /* ./parser//parser.nit:4292 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4292);
   }
-  /* ./parser//parser.nit:4233 */
+  /* ./parser//parser.nit:4294 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4294);
   }
-  /* ./parser//parser.nit:4235 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:4296 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4296);
   }
-  /* ./parser//parser.nit:4236 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4248 */
+  /* ./parser//parser.nit:4297 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4309 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4249 */
+  /* ./parser//parser.nit:4310 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4249);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4310);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13393,16 +13661,16 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction100___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction101___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4254;
-  fra.me.meth = LOCATE_parser___ReduceAction100___action;
+  fra.me.line = 4315;
+  fra.me.meth = LOCATE_parser___ReduceAction101___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;
@@ -13413,79 +13681,84 @@ void parser___ReduceAction100___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4256 */
+  /* ./parser//parser.nit:4317 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4257 */
+  /* ./parser//parser.nit:4318 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4258 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4259 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4260 */
+  /* ./parser//parser.nit:4319 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4261 */
+  /* ./parser//parser.nit:4320 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4262 */
+  /* ./parser//parser.nit:4321 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4263 */
+  /* ./parser//parser.nit:4322 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4264 */
+  /* ./parser//parser.nit:4323 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4265 */
+  /* ./parser//parser.nit:4324 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4267 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4325 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4327 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4327);
+  }
+  /* ./parser//parser.nit:4329 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4329);
   }
-  /* ./parser//parser.nit:4269 */
+  /* ./parser//parser.nit:4331 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4331);
   }
-  /* ./parser//parser.nit:4271 */
+  /* ./parser//parser.nit:4333 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4333);
   }
-  /* ./parser//parser.nit:4273 */
+  /* ./parser//parser.nit:4335 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4335);
   }
-  /* ./parser//parser.nit:4275 */
+  /* ./parser//parser.nit:4337 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4337);
   }
-  /* ./parser//parser.nit:4277 */
+  /* ./parser//parser.nit:4339 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4339);
   }
-  /* ./parser//parser.nit:4279 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:4341 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4341);
   }
-  /* ./parser//parser.nit:4280 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4292 */
+  /* ./parser//parser.nit:4342 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:4354 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4293 */
+  /* ./parser//parser.nit:4355 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4355);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13493,16 +13766,16 @@ void parser___ReduceAction100___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction101___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction102___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4298;
-  fra.me.meth = LOCATE_parser___ReduceAction101___action;
+  fra.me.line = 4360;
+  fra.me.meth = LOCATE_parser___ReduceAction102___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;
@@ -13511,72 +13784,63 @@ void parser___ReduceAction101___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4300 */
+  /* ./parser//parser.nit:4362 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4301 */
+  /* ./parser//parser.nit:4363 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4302 */
+  /* ./parser//parser.nit:4364 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4303 */
+  /* ./parser//parser.nit:4365 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4304 */
+  /* ./parser//parser.nit:4366 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4305 */
+  /* ./parser//parser.nit:4367 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4306 */
+  /* ./parser//parser.nit:4368 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4307 */
+  /* ./parser//parser.nit:4369 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4308 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4310 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4310);
-  }
-  /* ./parser//parser.nit:4312 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4371 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4371);
   }
-  /* ./parser//parser.nit:4314 */
+  /* ./parser//parser.nit:4373 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4373);
   }
-  /* ./parser//parser.nit:4316 */
+  /* ./parser//parser.nit:4375 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4375);
   }
-  /* ./parser//parser.nit:4318 */
+  /* ./parser//parser.nit:4377 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4318);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4377);
   }
-  /* ./parser//parser.nit:4320 */
+  /* ./parser//parser.nit:4379 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4379);
   }
-  /* ./parser//parser.nit:4321 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4333 */
+  /* ./parser//parser.nit:4380 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4392 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4334 */
+  /* ./parser//parser.nit:4393 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4334);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4393);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13584,16 +13848,16 @@ void parser___ReduceAction101___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction102___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser___ReduceAction103___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4339;
-  fra.me.meth = LOCATE_parser___ReduceAction102___action;
+  fra.me.line = 4398;
+  fra.me.meth = LOCATE_parser___ReduceAction103___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;
@@ -13603,80 +13867,71 @@ void parser___ReduceAction102___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4341 */
+  /* ./parser//parser.nit:4400 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4342 */
+  /* ./parser//parser.nit:4401 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4343 */
+  /* ./parser//parser.nit:4402 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4344 */
+  /* ./parser//parser.nit:4403 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4345 */
+  /* ./parser//parser.nit:4404 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4346 */
+  /* ./parser//parser.nit:4405 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4347 */
+  /* ./parser//parser.nit:4406 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4348 */
+  /* ./parser//parser.nit:4407 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4349 */
+  /* ./parser//parser.nit:4408 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4350 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4352 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4352);
-  }
-  /* ./parser//parser.nit:4354 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4410 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4410);
   }
-  /* ./parser//parser.nit:4356 */
+  /* ./parser//parser.nit:4412 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4412);
   }
-  /* ./parser//parser.nit:4358 */
+  /* ./parser//parser.nit:4414 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4414);
   }
-  /* ./parser//parser.nit:4360 */
+  /* ./parser//parser.nit:4416 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4360);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4416);
   }
-  /* ./parser//parser.nit:4362 */
+  /* ./parser//parser.nit:4418 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4418);
   }
-  /* ./parser//parser.nit:4364 */
+  /* ./parser//parser.nit:4420 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4420);
   }
-  /* ./parser//parser.nit:4365 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4377 */
+  /* ./parser//parser.nit:4421 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4433 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4378 */
+  /* ./parser//parser.nit:4434 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4378);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4434);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13684,16 +13939,16 @@ void parser___ReduceAction102___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction103___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+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 = 4383;
-  fra.me.meth = LOCATE_parser___ReduceAction103___action;
+  fra.me.line = 4439;
+  fra.me.meth = LOCATE_parser___ReduceAction104___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;
@@ -13703,80 +13958,71 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4385 */
+  /* ./parser//parser.nit:4441 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4386 */
+  /* ./parser//parser.nit:4442 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4387 */
+  /* ./parser//parser.nit:4443 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4388 */
+  /* ./parser//parser.nit:4444 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4389 */
+  /* ./parser//parser.nit:4445 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4390 */
+  /* ./parser//parser.nit:4446 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4391 */
+  /* ./parser//parser.nit:4447 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4392 */
+  /* ./parser//parser.nit:4448 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4393 */
+  /* ./parser//parser.nit:4449 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4394 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4396 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4396);
-  }
-  /* ./parser//parser.nit:4398 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4451 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4451);
   }
-  /* ./parser//parser.nit:4400 */
+  /* ./parser//parser.nit:4453 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4453);
   }
-  /* ./parser//parser.nit:4402 */
+  /* ./parser//parser.nit:4455 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4455);
   }
-  /* ./parser//parser.nit:4404 */
+  /* ./parser//parser.nit:4457 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4404);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4457);
   }
-  /* ./parser//parser.nit:4406 */
+  /* ./parser//parser.nit:4459 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4459);
   }
-  /* ./parser//parser.nit:4408 */
+  /* ./parser//parser.nit:4461 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4408);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4461);
   }
-  /* ./parser//parser.nit:4409 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4421 */
+  /* ./parser//parser.nit:4462 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4474 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4422 */
+  /* ./parser//parser.nit:4475 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4422);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4475);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13784,16 +14030,16 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction104___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+void parser___ReduceAction105___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4427;
-  fra.me.meth = LOCATE_parser___ReduceAction104___action;
+  fra.me.line = 4480;
+  fra.me.meth = LOCATE_parser___ReduceAction105___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13804,88 +14050,79 @@ void parser___ReduceAction104___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4429 */
+  /* ./parser//parser.nit:4482 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4430 */
+  /* ./parser//parser.nit:4483 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4431 */
+  /* ./parser//parser.nit:4484 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4432 */
+  /* ./parser//parser.nit:4485 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4433 */
+  /* ./parser//parser.nit:4486 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4434 */
+  /* ./parser//parser.nit:4487 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4435 */
+  /* ./parser//parser.nit:4488 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4436 */
+  /* ./parser//parser.nit:4489 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4437 */
+  /* ./parser//parser.nit:4490 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4438 */
+  /* ./parser//parser.nit:4491 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4439 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4441 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4441);
-  }
-  /* ./parser//parser.nit:4443 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4493 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4493);
   }
-  /* ./parser//parser.nit:4445 */
+  /* ./parser//parser.nit:4495 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4495);
   }
-  /* ./parser//parser.nit:4447 */
+  /* ./parser//parser.nit:4497 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4497);
   }
-  /* ./parser//parser.nit:4449 */
+  /* ./parser//parser.nit:4499 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4449);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4499);
   }
-  /* ./parser//parser.nit:4451 */
+  /* ./parser//parser.nit:4501 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4451);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4501);
   }
-  /* ./parser//parser.nit:4453 */
+  /* ./parser//parser.nit:4503 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4503);
   }
-  /* ./parser//parser.nit:4455 */
+  /* ./parser//parser.nit:4505 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4505);
   }
-  /* ./parser//parser.nit:4456 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4468 */
+  /* ./parser//parser.nit:4506 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4518 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4469 */
+  /* ./parser//parser.nit:4519 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4469);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4519);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13893,14 +14130,14 @@ void parser___ReduceAction104___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction105___action(val_t p0, val_t p1){
+void parser___ReduceAction106___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4474;
-  fra.me.meth = LOCATE_parser___ReduceAction105___action;
+  fra.me.line = 4524;
+  fra.me.meth = LOCATE_parser___ReduceAction106___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -13914,69 +14151,69 @@ void parser___ReduceAction105___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4476 */
+  /* ./parser//parser.nit:4526 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4477 */
+  /* ./parser//parser.nit:4527 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4478 */
+  /* ./parser//parser.nit:4528 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4479 */
+  /* ./parser//parser.nit:4529 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4480 */
+  /* ./parser//parser.nit:4530 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4481 */
+  /* ./parser//parser.nit:4531 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4482 */
+  /* ./parser//parser.nit:4532 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4483 */
+  /* ./parser//parser.nit:4533 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4484 */
+  /* ./parser//parser.nit:4534 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4486 */
+  /* ./parser//parser.nit:4536 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4536);
   }
-  /* ./parser//parser.nit:4488 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4538 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4538);
   }
-  /* ./parser//parser.nit:4490 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4540 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4540);
   }
-  /* ./parser//parser.nit:4492 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4542 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4542);
   }
-  /* ./parser//parser.nit:4494 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4544 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4494);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4544);
   }
-  /* ./parser//parser.nit:4496 */
+  /* ./parser//parser.nit:4546 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4496);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4546);
   }
-  /* ./parser//parser.nit:4497 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4509 */
+  /* ./parser//parser.nit:4547 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4559 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4510 */
+  /* ./parser//parser.nit:4560 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4510);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4560);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13984,14 +14221,14 @@ void parser___ReduceAction105___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction106___action(val_t p0, val_t p1){
+void parser___ReduceAction107___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4515;
-  fra.me.meth = LOCATE_parser___ReduceAction106___action;
+  fra.me.line = 4565;
+  fra.me.meth = LOCATE_parser___ReduceAction107___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -14006,77 +14243,77 @@ void parser___ReduceAction106___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4517 */
+  /* ./parser//parser.nit:4567 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4518 */
+  /* ./parser//parser.nit:4568 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4519 */
+  /* ./parser//parser.nit:4569 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4520 */
+  /* ./parser//parser.nit:4570 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4521 */
+  /* ./parser//parser.nit:4571 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4522 */
+  /* ./parser//parser.nit:4572 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4523 */
+  /* ./parser//parser.nit:4573 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4524 */
+  /* ./parser//parser.nit:4574 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4525 */
+  /* ./parser//parser.nit:4575 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4526 */
+  /* ./parser//parser.nit:4576 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4528 */
+  /* ./parser//parser.nit:4578 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4578);
   }
-  /* ./parser//parser.nit:4530 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4580 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4580);
   }
-  /* ./parser//parser.nit:4532 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4582 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4532);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4582);
   }
-  /* ./parser//parser.nit:4534 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4584 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4534);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4584);
   }
-  /* ./parser//parser.nit:4536 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4586 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4586);
   }
-  /* ./parser//parser.nit:4538 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4588 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4588);
   }
-  /* ./parser//parser.nit:4540 */
+  /* ./parser//parser.nit:4590 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4590);
   }
-  /* ./parser//parser.nit:4541 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4553 */
+  /* ./parser//parser.nit:4591 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4603 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4554 */
+  /* ./parser//parser.nit:4604 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4554);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4604);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14084,14 +14321,14 @@ void parser___ReduceAction106___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction107___action(val_t p0, val_t p1){
+void parser___ReduceAction108___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4559;
-  fra.me.meth = LOCATE_parser___ReduceAction107___action;
+  fra.me.line = 4609;
+  fra.me.meth = LOCATE_parser___ReduceAction108___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -14106,77 +14343,77 @@ void parser___ReduceAction107___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4561 */
+  /* ./parser//parser.nit:4611 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4562 */
+  /* ./parser//parser.nit:4612 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4563 */
+  /* ./parser//parser.nit:4613 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4564 */
+  /* ./parser//parser.nit:4614 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4565 */
+  /* ./parser//parser.nit:4615 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4566 */
+  /* ./parser//parser.nit:4616 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4567 */
+  /* ./parser//parser.nit:4617 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4568 */
+  /* ./parser//parser.nit:4618 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4569 */
+  /* ./parser//parser.nit:4619 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4570 */
+  /* ./parser//parser.nit:4620 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4572 */
+  /* ./parser//parser.nit:4622 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4622);
   }
-  /* ./parser//parser.nit:4574 */
+  /* ./parser//parser.nit:4624 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4624);
   }
-  /* ./parser//parser.nit:4576 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4626 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4576);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4626);
   }
-  /* ./parser//parser.nit:4578 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4628 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4578);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4628);
   }
-  /* ./parser//parser.nit:4580 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4630 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4630);
   }
-  /* ./parser//parser.nit:4582 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4632 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4632);
   }
-  /* ./parser//parser.nit:4584 */
+  /* ./parser//parser.nit:4634 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4584);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4634);
   }
-  /* ./parser//parser.nit:4585 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4597 */
+  /* ./parser//parser.nit:4635 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4647 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4598 */
+  /* ./parser//parser.nit:4648 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4648);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14184,14 +14421,14 @@ void parser___ReduceAction107___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction108___action(val_t p0, val_t p1){
+void parser___ReduceAction109___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4603;
-  fra.me.meth = LOCATE_parser___ReduceAction108___action;
+  fra.me.line = 4653;
+  fra.me.meth = LOCATE_parser___ReduceAction109___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
@@ -14207,185 +14444,85 @@ void parser___ReduceAction108___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4605 */
+  /* ./parser//parser.nit:4655 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4606 */
+  /* ./parser//parser.nit:4656 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4607 */
+  /* ./parser//parser.nit:4657 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4608 */
+  /* ./parser//parser.nit:4658 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4609 */
+  /* ./parser//parser.nit:4659 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4610 */
+  /* ./parser//parser.nit:4660 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4611 */
+  /* ./parser//parser.nit:4661 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4612 */
+  /* ./parser//parser.nit:4662 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4613 */
+  /* ./parser//parser.nit:4663 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4614 */
+  /* ./parser//parser.nit:4664 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4615 */
+  /* ./parser//parser.nit:4665 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4617 */
+  /* ./parser//parser.nit:4667 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4667);
   }
-  /* ./parser//parser.nit:4619 */
+  /* ./parser//parser.nit:4669 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4619);
-  }
-  /* ./parser//parser.nit:4621 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4621);
-  }
-  /* ./parser//parser.nit:4623 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4623);
-  }
-  /* ./parser//parser.nit:4625 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4625);
-  }
-  /* ./parser//parser.nit:4627 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4627);
-  }
-  /* ./parser//parser.nit:4629 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4629);
-  }
-  /* ./parser//parser.nit:4631 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4631);
-  }
-  /* ./parser//parser.nit:4632 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4644 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4645 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4645);
-  }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction109___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 = 4650;
-  fra.me.meth = LOCATE_parser___ReduceAction109___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;
-  /* ./parser//parser.nit:4652 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4653 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4654 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4655 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4656 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4657 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4658 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4659 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4660 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4661 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4663 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4669);
   }
-  /* ./parser//parser.nit:4665 */
+  /* ./parser//parser.nit:4671 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4671);
   }
-  /* ./parser//parser.nit:4667 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4673 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4667);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4673);
   }
-  /* ./parser//parser.nit:4669 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4675 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4675);
   }
-  /* ./parser//parser.nit:4671 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* ./parser//parser.nit:4677 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4677);
   }
-  /* ./parser//parser.nit:4673 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4679 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4679);
   }
-  /* ./parser//parser.nit:4675 */
+  /* ./parser//parser.nit:4681 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4681);
   }
-  /* ./parser//parser.nit:4676 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4688 */
+  /* ./parser//parser.nit:4682 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:4694 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4689 */
+  /* ./parser//parser.nit:4695 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4689);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4695);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14394,15 +14531,15 @@ void parser___ReduceAction109___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction110___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 4694;
+  fra.me.line = 4700;
   fra.me.meth = LOCATE_parser___ReduceAction110___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14412,46 +14549,28 @@ void parser___ReduceAction110___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;
-  /* ./parser//parser.nit:4696 */
+  /* ./parser//parser.nit:4702 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4697 */
+  /* ./parser//parser.nit:4703 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4698 */
+  /* ./parser//parser.nit:4704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4699 */
+  /* ./parser//parser.nit:4705 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4700 */
+  /* ./parser//parser.nit:4706 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4701 */
+  /* ./parser//parser.nit:4707 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4702 */
+  /* ./parser//parser.nit:4708 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4703 */
+  /* ./parser//parser.nit:4709 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4704 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4705 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4706 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4708 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4708);
-  }
   /* ./parser//parser.nit:4710 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4710);
-  }
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4712 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Assert failed", NULL, LOCATE_parser, 4712);
@@ -14487,7 +14606,7 @@ void parser___ReduceAction110___action(val_t p0, val_t p1){
     nit_abort("Assert failed", NULL, LOCATE_parser, 4722);
   }
   /* ./parser//parser.nit:4723 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
   /* ./parser//parser.nit:4735 */
   fra.me.REG[2] = fra.me.REG[3];
   /* ./parser//parser.nit:4736 */
@@ -14503,7 +14622,7 @@ void parser___ReduceAction110___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction111___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -14511,7 +14630,7 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.line = 4741;
   fra.me.meth = LOCATE_parser___ReduceAction111___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14522,7 +14641,6 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   /* ./parser//parser.nit:4743 */
@@ -14545,65 +14663,57 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
   /* ./parser//parser.nit:4752 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4753 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4755 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4755);
-  }
-  /* ./parser//parser.nit:4757 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4754 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4757);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4754);
   }
-  /* ./parser//parser.nit:4759 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4756 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4759);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4756);
   }
-  /* ./parser//parser.nit:4761 */
+  /* ./parser//parser.nit:4758 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4761);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4758);
   }
-  /* ./parser//parser.nit:4763 */
+  /* ./parser//parser.nit:4760 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4763);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4760);
   }
-  /* ./parser//parser.nit:4765 */
+  /* ./parser//parser.nit:4762 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4762);
   }
-  /* ./parser//parser.nit:4767 */
+  /* ./parser//parser.nit:4764 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4767);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4764);
   }
-  /* ./parser//parser.nit:4769 */
+  /* ./parser//parser.nit:4766 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4766);
   }
-  /* ./parser//parser.nit:4770 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4782 */
+  /* ./parser//parser.nit:4767 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4779 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4783 */
+  /* ./parser//parser.nit:4780 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4783);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4780);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14612,15 +14722,15 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction112___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 4788;
+  fra.me.line = 4785;
   fra.me.meth = LOCATE_parser___ReduceAction112___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14631,97 +14741,79 @@ void parser___ReduceAction112___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[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4790 */
+  /* ./parser//parser.nit:4787 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4791 */
+  /* ./parser//parser.nit:4788 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4792 */
+  /* ./parser//parser.nit:4789 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4793 */
+  /* ./parser//parser.nit:4790 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4794 */
+  /* ./parser//parser.nit:4791 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4795 */
+  /* ./parser//parser.nit:4792 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4796 */
+  /* ./parser//parser.nit:4793 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4797 */
+  /* ./parser//parser.nit:4794 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4798 */
+  /* ./parser//parser.nit:4795 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4799 */
+  /* ./parser//parser.nit:4796 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4800 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4801 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4803 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4803);
-  }
-  /* ./parser//parser.nit:4805 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4805);
-  }
-  /* ./parser//parser.nit:4807 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:4798 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4798);
   }
-  /* ./parser//parser.nit:4809 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4800 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4800);
   }
-  /* ./parser//parser.nit:4811 */
+  /* ./parser//parser.nit:4802 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4802);
   }
-  /* ./parser//parser.nit:4813 */
+  /* ./parser//parser.nit:4804 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4813);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4804);
   }
-  /* ./parser//parser.nit:4815 */
+  /* ./parser//parser.nit:4806 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4815);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4806);
   }
-  /* ./parser//parser.nit:4817 */
+  /* ./parser//parser.nit:4808 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4817);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4808);
   }
-  /* ./parser//parser.nit:4819 */
+  /* ./parser//parser.nit:4810 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4810);
   }
-  /* ./parser//parser.nit:4820 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4832 */
+  /* ./parser//parser.nit:4811 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4823 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4833 */
+  /* ./parser//parser.nit:4824 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4833);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4824);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14730,15 +14822,15 @@ void parser___ReduceAction112___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction113___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4838;
+  fra.me.line = 4829;
   fra.me.meth = LOCATE_parser___ReduceAction113___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 11;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14746,51 +14838,91 @@ void parser___ReduceAction113___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[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4840 */
+  /* ./parser//parser.nit:4831 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4841 */
+  /* ./parser//parser.nit:4832 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4842 */
+  /* ./parser//parser.nit:4833 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4843 */
+  /* ./parser//parser.nit:4834 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4835 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4836 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4844 */
+  /* ./parser//parser.nit:4837 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4846 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4838 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4839 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4840 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4841 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4843 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4846);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4843);
   }
-  /* ./parser//parser.nit:4848 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4845 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4845);
   }
-  /* ./parser//parser.nit:4850 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4847 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4847);
   }
-  /* ./parser//parser.nit:4852 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:4849 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4849);
+  }
+  /* ./parser//parser.nit:4851 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4852);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4851);
   }
   /* ./parser//parser.nit:4853 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4865 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4853);
+  }
+  /* ./parser//parser.nit:4855 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4855);
+  }
+  /* ./parser//parser.nit:4857 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4857);
+  }
+  /* ./parser//parser.nit:4858 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4870 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4866 */
+  /* ./parser//parser.nit:4871 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4866);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4871);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14799,15 +14931,15 @@ void parser___ReduceAction113___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction114___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  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 = 4871;
+  fra.me.line = 4876;
   fra.me.meth = LOCATE_parser___ReduceAction114___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;
@@ -14816,59 +14948,81 @@ void parser___ReduceAction114___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;
-  /* ./parser//parser.nit:4873 */
+  /* ./parser//parser.nit:4878 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4874 */
+  /* ./parser//parser.nit:4879 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4875 */
+  /* ./parser//parser.nit:4880 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4881 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4882 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4876 */
+  /* ./parser//parser.nit:4883 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4877 */
+  /* ./parser//parser.nit:4884 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4878 */
+  /* ./parser//parser.nit:4885 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4880 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4886 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4887 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4889 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4889);
   }
-  /* ./parser//parser.nit:4882 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4891 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4882);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4891);
   }
-  /* ./parser//parser.nit:4884 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4893 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4884);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4893);
   }
-  /* ./parser//parser.nit:4886 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4895 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4895);
   }
-  /* ./parser//parser.nit:4888 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:4897 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4888);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4897);
+  }
+  /* ./parser//parser.nit:4899 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4899);
   }
-  /* ./parser//parser.nit:4889 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
   /* ./parser//parser.nit:4901 */
-  fra.me.REG[2] = fra.me.REG[3];
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4901);
+  }
   /* ./parser//parser.nit:4902 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4914 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:4915 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4902);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4915);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14877,15 +15031,15 @@ void parser___ReduceAction114___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction115___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4907;
+  fra.me.line = 4920;
   fra.me.meth = LOCATE_parser___ReduceAction115___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;
@@ -14894,59 +15048,90 @@ void parser___ReduceAction115___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;
-  /* ./parser//parser.nit:4909 */
+  /* ./parser//parser.nit:4922 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4910 */
+  /* ./parser//parser.nit:4923 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4911 */
+  /* ./parser//parser.nit:4924 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4912 */
+  /* ./parser//parser.nit:4925 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4926 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4927 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4913 */
+  /* ./parser//parser.nit:4928 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4914 */
+  /* ./parser//parser.nit:4929 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4916 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4930 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4931 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4932 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4934 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4916);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4934);
   }
-  /* ./parser//parser.nit:4918 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4936 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4918);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4936);
   }
-  /* ./parser//parser.nit:4920 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4938 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4920);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4938);
   }
-  /* ./parser//parser.nit:4922 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:4940 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4922);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4940);
   }
-  /* ./parser//parser.nit:4924 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4942 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4924);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4942);
   }
-  /* ./parser//parser.nit:4925 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4937 */
+  /* ./parser//parser.nit:4944 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4944);
+  }
+  /* ./parser//parser.nit:4946 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4946);
+  }
+  /* ./parser//parser.nit:4948 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4948);
+  }
+  /* ./parser//parser.nit:4949 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:4961 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4938 */
+  /* ./parser//parser.nit:4962 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4938);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4962);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14955,15 +15140,15 @@ void parser___ReduceAction115___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction116___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4943;
+  fra.me.line = 4967;
   fra.me.meth = LOCATE_parser___ReduceAction116___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;
@@ -14973,67 +15158,89 @@ void parser___ReduceAction116___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;
-  /* ./parser//parser.nit:4945 */
+  /* ./parser//parser.nit:4969 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4946 */
+  /* ./parser//parser.nit:4970 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4947 */
+  /* ./parser//parser.nit:4971 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4948 */
+  /* ./parser//parser.nit:4972 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4973 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4974 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4949 */
+  /* ./parser//parser.nit:4975 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4950 */
+  /* ./parser//parser.nit:4976 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4951 */
+  /* ./parser//parser.nit:4977 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4953 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:4978 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4979 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:4981 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4953);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4981);
   }
-  /* ./parser//parser.nit:4955 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:4983 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4983);
   }
-  /* ./parser//parser.nit:4957 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:4985 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4957);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4985);
   }
-  /* ./parser//parser.nit:4959 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:4987 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4987);
   }
-  /* ./parser//parser.nit:4961 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:4989 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4989);
   }
-  /* ./parser//parser.nit:4963 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:4991 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4991);
   }
-  /* ./parser//parser.nit:4964 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4976 */
+  /* ./parser//parser.nit:4993 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4993);
+  }
+  /* ./parser//parser.nit:4995 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4995);
+  }
+  /* ./parser//parser.nit:4996 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5008 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4977 */
+  /* ./parser//parser.nit:5009 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4977);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5009);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15042,15 +15249,15 @@ void parser___ReduceAction116___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction117___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4982;
+  fra.me.line = 5014;
   fra.me.meth = LOCATE_parser___ReduceAction117___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;
@@ -15059,59 +15266,99 @@ void parser___ReduceAction117___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;
-  /* ./parser//parser.nit:4984 */
+  /* ./parser//parser.nit:5016 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4985 */
+  /* ./parser//parser.nit:5017 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4986 */
+  /* ./parser//parser.nit:5018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4987 */
+  /* ./parser//parser.nit:5019 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5020 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5021 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4988 */
+  /* ./parser//parser.nit:5022 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4989 */
+  /* ./parser//parser.nit:5023 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4991 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5024 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5025 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5026 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5027 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5029 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4991);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5029);
   }
-  /* ./parser//parser.nit:4993 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5031 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4993);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5031);
   }
-  /* ./parser//parser.nit:4995 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5033 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4995);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5033);
   }
-  /* ./parser//parser.nit:4997 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5035 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5035);
   }
-  /* ./parser//parser.nit:4999 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5037 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4999);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5037);
   }
-  /* ./parser//parser.nit:5000 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5012 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5013 */
+  /* ./parser//parser.nit:5039 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5039);
+  }
+  /* ./parser//parser.nit:5041 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5041);
+  }
+  /* ./parser//parser.nit:5043 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5043);
+  }
+  /* ./parser//parser.nit:5045 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5045);
+  }
+  /* ./parser//parser.nit:5046 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5058 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5059 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5013);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5059);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15120,15 +15367,15 @@ void parser___ReduceAction117___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction118___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  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 = 5018;
+  fra.me.line = 5064;
   fra.me.meth = LOCATE_parser___ReduceAction118___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;
@@ -15136,69 +15383,51 @@ void parser___ReduceAction118___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5020 */
+  /* ./parser//parser.nit:5066 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5021 */
+  /* ./parser//parser.nit:5067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5022 */
+  /* ./parser//parser.nit:5068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5023 */
+  /* ./parser//parser.nit:5069 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5024 */
+  /* ./parser//parser.nit:5070 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5025 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5026 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5028 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5028);
-  }
-  /* ./parser//parser.nit:5030 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5030);
-  }
-  /* ./parser//parser.nit:5032 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5072 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5032);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5072);
   }
-  /* ./parser//parser.nit:5034 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5074 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5034);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5074);
   }
-  /* ./parser//parser.nit:5036 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5076 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5036);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5076);
   }
-  /* ./parser//parser.nit:5038 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5078 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5038);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5078);
   }
-  /* ./parser//parser.nit:5039 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5051 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5052 */
+  /* ./parser//parser.nit:5079 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5091 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5092 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5052);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5092);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15207,15 +15436,15 @@ void parser___ReduceAction118___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction119___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5057;
+  fra.me.line = 5097;
   fra.me.meth = LOCATE_parser___ReduceAction119___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;
@@ -15224,68 +15453,59 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5059 */
+  /* ./parser//parser.nit:5099 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5060 */
+  /* ./parser//parser.nit:5100 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5061 */
+  /* ./parser//parser.nit:5101 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5062 */
+  /* ./parser//parser.nit:5102 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5063 */
+  /* ./parser//parser.nit:5103 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5064 */
+  /* ./parser//parser.nit:5104 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5065 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5067 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5067);
-  }
-  /* ./parser//parser.nit:5069 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5106 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5106);
   }
-  /* ./parser//parser.nit:5071 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5108 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5071);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5108);
   }
-  /* ./parser//parser.nit:5073 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5110 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5110);
   }
-  /* ./parser//parser.nit:5075 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5112 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5112);
   }
-  /* ./parser//parser.nit:5077 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5114 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5114);
   }
-  /* ./parser//parser.nit:5078 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5090 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5091 */
+  /* ./parser//parser.nit:5115 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5127 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5128 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5091);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5128);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15294,15 +15514,15 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction120___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5096;
+  fra.me.line = 5133;
   fra.me.meth = LOCATE_parser___ReduceAction120___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;
@@ -15311,77 +15531,59 @@ void parser___ReduceAction120___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;
-  /* ./parser//parser.nit:5098 */
+  /* ./parser//parser.nit:5135 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5099 */
+  /* ./parser//parser.nit:5136 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5100 */
+  /* ./parser//parser.nit:5137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5101 */
+  /* ./parser//parser.nit:5138 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5102 */
+  /* ./parser//parser.nit:5139 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5103 */
+  /* ./parser//parser.nit:5140 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5104 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5105 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5107 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5107);
-  }
-  /* ./parser//parser.nit:5109 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5109);
-  }
-  /* ./parser//parser.nit:5111 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5142 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5142);
   }
-  /* ./parser//parser.nit:5113 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5144 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5144);
   }
-  /* ./parser//parser.nit:5115 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5146 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5146);
   }
-  /* ./parser//parser.nit:5117 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5148 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5117);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5148);
   }
-  /* ./parser//parser.nit:5119 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5150 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5119);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5150);
   }
-  /* ./parser//parser.nit:5120 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5132 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5133 */
+  /* ./parser//parser.nit:5151 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:5163 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5164 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5133);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5164);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15390,15 +15592,15 @@ void parser___ReduceAction120___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction121___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  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 = 5138;
+  fra.me.line = 5169;
   fra.me.meth = LOCATE_parser___ReduceAction121___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;
@@ -15407,63 +15609,68 @@ void parser___ReduceAction121___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5140 */
+  /* ./parser//parser.nit:5171 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5141 */
+  /* ./parser//parser.nit:5172 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5142 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5143 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5144 */
+  /* ./parser//parser.nit:5173 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5145 */
+  /* ./parser//parser.nit:5174 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5146 */
+  /* ./parser//parser.nit:5175 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5147 */
+  /* ./parser//parser.nit:5176 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5149 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5177 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5179 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5179);
   }
-  /* ./parser//parser.nit:5151 */
+  /* ./parser//parser.nit:5181 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5181);
+  }
+  /* ./parser//parser.nit:5183 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5183);
   }
-  /* ./parser//parser.nit:5153 */
+  /* ./parser//parser.nit:5185 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5185);
   }
-  /* ./parser//parser.nit:5155 */
+  /* ./parser//parser.nit:5187 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5187);
   }
-  /* ./parser//parser.nit:5157 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:5189 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5189);
   }
-  /* ./parser//parser.nit:5158 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5170 */
+  /* ./parser//parser.nit:5190 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:5202 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5171 */
+  /* ./parser//parser.nit:5203 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5171);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5203);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15472,15 +15679,15 @@ void parser___ReduceAction121___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction122___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5176;
+  fra.me.line = 5208;
   fra.me.meth = LOCATE_parser___ReduceAction122___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;
@@ -15489,72 +15696,59 @@ void parser___ReduceAction122___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5178 */
+  /* ./parser//parser.nit:5210 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5179 */
+  /* ./parser//parser.nit:5211 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5180 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5181 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5182 */
+  /* ./parser//parser.nit:5212 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5183 */
+  /* ./parser//parser.nit:5213 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5184 */
+  /* ./parser//parser.nit:5214 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5185 */
+  /* ./parser//parser.nit:5215 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5186 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5188 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5217 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5217);
   }
-  /* ./parser//parser.nit:5190 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5219 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5219);
   }
-  /* ./parser//parser.nit:5192 */
+  /* ./parser//parser.nit:5221 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5221);
   }
-  /* ./parser//parser.nit:5194 */
+  /* ./parser//parser.nit:5223 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5194);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5223);
   }
-  /* ./parser//parser.nit:5196 */
+  /* ./parser//parser.nit:5225 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5196);
-  }
-  /* ./parser//parser.nit:5198 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5225);
   }
-  /* ./parser//parser.nit:5199 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5211 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5212 */
+  /* ./parser//parser.nit:5226 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5238 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5239 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5212);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5239);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15568,7 +15762,7 @@ void parser___ReduceAction123___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5217;
+  fra.me.line = 5244;
   fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -15583,69 +15777,65 @@ void parser___ReduceAction123___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5219 */
+  /* ./parser//parser.nit:5246 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5220 */
+  /* ./parser//parser.nit:5247 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5221 */
+  /* ./parser//parser.nit:5248 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5222 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5223 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5224 */
+  /* ./parser//parser.nit:5249 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5225 */
+  /* ./parser//parser.nit:5250 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5226 */
+  /* ./parser//parser.nit:5251 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5227 */
+  /* ./parser//parser.nit:5252 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5229 */
+  /* ./parser//parser.nit:5254 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5254);
   }
-  /* ./parser//parser.nit:5231 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5256 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5256);
   }
-  /* ./parser//parser.nit:5233 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5258 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5258);
   }
-  /* ./parser//parser.nit:5235 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5260 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5260);
   }
-  /* ./parser//parser.nit:5237 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5262 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5262);
   }
-  /* ./parser//parser.nit:5239 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:5264 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5264);
   }
-  /* ./parser//parser.nit:5240 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5252 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5253 */
+  /* ./parser//parser.nit:5265 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:5277 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5278 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5278);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15654,15 +15844,15 @@ void parser___ReduceAction123___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction124___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 5258;
+  fra.me.line = 5283;
   fra.me.meth = LOCATE_parser___ReduceAction124___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;
@@ -15672,80 +15862,67 @@ void parser___ReduceAction124___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5260 */
+  /* ./parser//parser.nit:5285 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5261 */
+  /* ./parser//parser.nit:5286 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5262 */
+  /* ./parser//parser.nit:5287 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5263 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5264 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5265 */
+  /* ./parser//parser.nit:5288 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5266 */
+  /* ./parser//parser.nit:5289 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5267 */
+  /* ./parser//parser.nit:5290 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5268 */
+  /* ./parser//parser.nit:5291 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5269 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5271 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5293 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5293);
   }
-  /* ./parser//parser.nit:5273 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5295 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5295);
   }
-  /* ./parser//parser.nit:5275 */
+  /* ./parser//parser.nit:5297 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5297);
   }
-  /* ./parser//parser.nit:5277 */
+  /* ./parser//parser.nit:5299 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5299);
   }
-  /* ./parser//parser.nit:5279 */
+  /* ./parser//parser.nit:5301 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5301);
   }
-  /* ./parser//parser.nit:5281 */
+  /* ./parser//parser.nit:5303 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5281);
-  }
-  /* ./parser//parser.nit:5283 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5303);
   }
-  /* ./parser//parser.nit:5284 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5296 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5297 */
+  /* ./parser//parser.nit:5304 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:5316 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5317 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5297);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5317);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15754,15 +15931,15 @@ void parser___ReduceAction124___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction125___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  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 = 5302;
+  fra.me.line = 5322;
   fra.me.meth = LOCATE_parser___ReduceAction125___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;
@@ -15772,71 +15949,76 @@ void parser___ReduceAction125___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5304 */
+  /* ./parser//parser.nit:5324 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5305 */
+  /* ./parser//parser.nit:5325 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5306 */
+  /* ./parser//parser.nit:5326 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5307 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5308 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5309 */
+  /* ./parser//parser.nit:5327 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5310 */
+  /* ./parser//parser.nit:5328 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5311 */
+  /* ./parser//parser.nit:5329 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5312 */
+  /* ./parser//parser.nit:5330 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5314 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5331 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5333 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5333);
   }
-  /* ./parser//parser.nit:5316 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5335 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5335);
+  }
+  /* ./parser//parser.nit:5337 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5337);
   }
-  /* ./parser//parser.nit:5318 */
+  /* ./parser//parser.nit:5339 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5318);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5339);
   }
-  /* ./parser//parser.nit:5320 */
+  /* ./parser//parser.nit:5341 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5341);
   }
-  /* ./parser//parser.nit:5322 */
+  /* ./parser//parser.nit:5343 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5343);
   }
-  /* ./parser//parser.nit:5324 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:5345 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5345);
   }
-  /* ./parser//parser.nit:5325 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5337 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5338 */
+  /* ./parser//parser.nit:5346 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* ./parser//parser.nit:5358 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:5359 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5338);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5359);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15845,15 +16027,15 @@ void parser___ReduceAction125___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction126___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5343;
+  fra.me.line = 5364;
   fra.me.meth = LOCATE_parser___ReduceAction126___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;
@@ -15862,81 +16044,63 @@ void parser___ReduceAction126___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;
-  /* ./parser//parser.nit:5345 */
+  /* ./parser//parser.nit:5366 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5346 */
+  /* ./parser//parser.nit:5367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5347 */
+  /* ./parser//parser.nit:5368 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5348 */
+  /* ./parser//parser.nit:5369 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5349 */
+  /* ./parser//parser.nit:5370 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5350 */
+  /* ./parser//parser.nit:5371 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5351 */
+  /* ./parser//parser.nit:5372 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5352 */
+  /* ./parser//parser.nit:5373 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5353 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5354 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5356 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5356);
-  }
-  /* ./parser//parser.nit:5358 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5358);
-  }
-  /* ./parser//parser.nit:5360 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5375 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5360);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5375);
   }
-  /* ./parser//parser.nit:5362 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5377 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5377);
   }
-  /* ./parser//parser.nit:5364 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5379 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5379);
   }
-  /* ./parser//parser.nit:5366 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5381 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5381);
   }
-  /* ./parser//parser.nit:5368 */
+  /* ./parser//parser.nit:5383 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5383);
   }
-  /* ./parser//parser.nit:5369 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5381 */
+  /* ./parser//parser.nit:5384 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5396 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5382 */
+  /* ./parser//parser.nit:5397 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5382);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5397);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15945,15 +16109,15 @@ void parser___ReduceAction126___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction127___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 5387;
+  fra.me.line = 5402;
   fra.me.meth = LOCATE_parser___ReduceAction127___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;
@@ -15963,80 +16127,71 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5389 */
+  /* ./parser//parser.nit:5404 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5390 */
+  /* ./parser//parser.nit:5405 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5391 */
+  /* ./parser//parser.nit:5406 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5392 */
+  /* ./parser//parser.nit:5407 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5393 */
+  /* ./parser//parser.nit:5408 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5394 */
+  /* ./parser//parser.nit:5409 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5395 */
+  /* ./parser//parser.nit:5410 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5396 */
+  /* ./parser//parser.nit:5411 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5397 */
+  /* ./parser//parser.nit:5412 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5398 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5400 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5400);
-  }
-  /* ./parser//parser.nit:5402 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* ./parser//parser.nit:5414 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5414);
   }
-  /* ./parser//parser.nit:5404 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5416 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5404);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5416);
   }
-  /* ./parser//parser.nit:5406 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5418 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5418);
   }
-  /* ./parser//parser.nit:5408 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5420 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5408);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5420);
   }
-  /* ./parser//parser.nit:5410 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5422 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5410);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5422);
   }
-  /* ./parser//parser.nit:5412 */
+  /* ./parser//parser.nit:5424 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5412);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5424);
   }
-  /* ./parser//parser.nit:5413 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
   /* ./parser//parser.nit:5425 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5437 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5426 */
+  /* ./parser//parser.nit:5438 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5426);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5438);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16045,15 +16200,15 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction128___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 5431;
+  fra.me.line = 5443;
   fra.me.meth = LOCATE_parser___ReduceAction128___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16063,89 +16218,71 @@ void parser___ReduceAction128___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;
-  /* ./parser//parser.nit:5433 */
+  /* ./parser//parser.nit:5445 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5434 */
+  /* ./parser//parser.nit:5446 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5435 */
+  /* ./parser//parser.nit:5447 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5436 */
+  /* ./parser//parser.nit:5448 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5437 */
+  /* ./parser//parser.nit:5449 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5438 */
+  /* ./parser//parser.nit:5450 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5439 */
+  /* ./parser//parser.nit:5451 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5440 */
+  /* ./parser//parser.nit:5452 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5441 */
+  /* ./parser//parser.nit:5453 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5442 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5443 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5445 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5445);
-  }
-  /* ./parser//parser.nit:5447 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5447);
-  }
-  /* ./parser//parser.nit:5449 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5455 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5449);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5455);
   }
-  /* ./parser//parser.nit:5451 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5457 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5451);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5457);
   }
-  /* ./parser//parser.nit:5453 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* ./parser//parser.nit:5459 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5459);
   }
-  /* ./parser//parser.nit:5455 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:5461 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5461);
   }
-  /* ./parser//parser.nit:5457 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5463 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5457);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5463);
   }
-  /* ./parser//parser.nit:5459 */
+  /* ./parser//parser.nit:5465 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5459);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5465);
   }
-  /* ./parser//parser.nit:5460 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:5472 */
+  /* ./parser//parser.nit:5466 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5478 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5473 */
+  /* ./parser//parser.nit:5479 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5473);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5479);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16154,15 +16291,15 @@ void parser___ReduceAction128___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction129___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  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 = 5478;
+  fra.me.line = 5484;
   fra.me.meth = LOCATE_parser___ReduceAction129___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;
@@ -16171,61 +16308,81 @@ void parser___ReduceAction129___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;
-  /* ./parser//parser.nit:5480 */
+  /* ./parser//parser.nit:5486 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5481 */
+  /* ./parser//parser.nit:5487 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5482 */
+  /* ./parser//parser.nit:5488 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5483 */
+  /* ./parser//parser.nit:5489 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5484 */
+  /* ./parser//parser.nit:5490 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5491 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5485 */
+  /* ./parser//parser.nit:5492 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5486 */
+  /* ./parser//parser.nit:5493 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5488 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5494 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5495 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5497 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5497);
   }
-  /* ./parser//parser.nit:5490 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5499 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5499);
   }
-  /* ./parser//parser.nit:5492 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5501 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5501);
   }
-  /* ./parser//parser.nit:5494 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:5503 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5494);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5503);
   }
-  /* ./parser//parser.nit:5496 */
+  /* ./parser//parser.nit:5505 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5505);
+  }
+  /* ./parser//parser.nit:5507 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5507);
+  }
+  /* ./parser//parser.nit:5509 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5496);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5509);
   }
-  /* ./parser//parser.nit:5497 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5506 */
+  /* ./parser//parser.nit:5510 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5522 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5507 */
+  /* ./parser//parser.nit:5523 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5507);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5523);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16239,7 +16396,7 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5512;
+  fra.me.line = 5528;
   fra.me.meth = LOCATE_parser___ReduceAction130___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -16254,67 +16411,69 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5514 */
+  /* ./parser//parser.nit:5530 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5515 */
+  /* ./parser//parser.nit:5531 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5516 */
+  /* ./parser//parser.nit:5532 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5533 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5517 */
+  /* ./parser//parser.nit:5534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5518 */
+  /* ./parser//parser.nit:5535 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5519 */
+  /* ./parser//parser.nit:5536 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5520 */
+  /* ./parser//parser.nit:5537 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5521 */
+  /* ./parser//parser.nit:5538 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5523 */
+  /* ./parser//parser.nit:5540 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5540);
   }
-  /* ./parser//parser.nit:5525 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5542 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5525);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5542);
   }
-  /* ./parser//parser.nit:5527 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5544 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5544);
   }
-  /* ./parser//parser.nit:5529 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5546 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5529);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5546);
   }
-  /* ./parser//parser.nit:5531 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:5548 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5548);
   }
-  /* ./parser//parser.nit:5533 */
+  /* ./parser//parser.nit:5550 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5550);
   }
-  /* ./parser//parser.nit:5534 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5543 */
+  /* ./parser//parser.nit:5551 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5563 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5544 */
+  /* ./parser//parser.nit:5564 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5544);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5564);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16323,15 +16482,15 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction131___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  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 = 5549;
+  fra.me.line = 5569;
   fra.me.meth = LOCATE_parser___ReduceAction131___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;
@@ -16341,69 +16500,80 @@ void parser___ReduceAction131___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5551 */
+  /* ./parser//parser.nit:5571 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5552 */
+  /* ./parser//parser.nit:5572 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5553 */
+  /* ./parser//parser.nit:5573 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5574 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5554 */
+  /* ./parser//parser.nit:5575 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5555 */
+  /* ./parser//parser.nit:5576 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5556 */
+  /* ./parser//parser.nit:5577 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5557 */
+  /* ./parser//parser.nit:5578 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5558 */
+  /* ./parser//parser.nit:5579 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5560 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* ./parser//parser.nit:5580 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5582 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5582);
   }
-  /* ./parser//parser.nit:5562 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5584 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5584);
   }
-  /* ./parser//parser.nit:5564 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5586 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5586);
   }
-  /* ./parser//parser.nit:5566 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:5588 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5588);
   }
-  /* ./parser//parser.nit:5568 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:5590 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5590);
+  }
+  /* ./parser//parser.nit:5592 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5592);
   }
-  /* ./parser//parser.nit:5570 */
+  /* ./parser//parser.nit:5594 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5594);
   }
-  /* ./parser//parser.nit:5571 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5580 */
+  /* ./parser//parser.nit:5595 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:5607 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5581 */
+  /* ./parser//parser.nit:5608 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5581);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5608);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16417,7 +16587,7 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5586;
+  fra.me.line = 5613;
   fra.me.meth = LOCATE_parser___ReduceAction132___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -16433,75 +16603,77 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5588 */
+  /* ./parser//parser.nit:5615 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5589 */
+  /* ./parser//parser.nit:5616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5590 */
+  /* ./parser//parser.nit:5617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5591 */
+  /* ./parser//parser.nit:5618 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5592 */
+  /* ./parser//parser.nit:5619 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5593 */
+  /* ./parser//parser.nit:5621 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5594 */
+  /* ./parser//parser.nit:5622 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5595 */
+  /* ./parser//parser.nit:5623 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5596 */
+  /* ./parser//parser.nit:5624 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5598 */
+  /* ./parser//parser.nit:5626 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5598);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5626);
   }
-  /* ./parser//parser.nit:5600 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5628 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5628);
   }
-  /* ./parser//parser.nit:5602 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:5630 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5630);
   }
-  /* ./parser//parser.nit:5604 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* ./parser//parser.nit:5632 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5604);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5632);
   }
-  /* ./parser//parser.nit:5606 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* ./parser//parser.nit:5634 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5606);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5634);
   }
-  /* ./parser//parser.nit:5608 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:5636 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5608);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5636);
   }
-  /* ./parser//parser.nit:5610 */
+  /* ./parser//parser.nit:5638 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5638);
   }
-  /* ./parser//parser.nit:5611 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5620 */
+  /* ./parser//parser.nit:5639 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:5651 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5621 */
+  /* ./parser//parser.nit:5652 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5621);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5652);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16510,15 +16682,15 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction133___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5626;
+  fra.me.line = 5657;
   fra.me.meth = LOCATE_parser___ReduceAction133___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;
@@ -16527,63 +16699,170 @@ void parser___ReduceAction133___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;
-  /* ./parser//parser.nit:5628 */
+  /* ./parser//parser.nit:5659 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5629 */
+  /* ./parser//parser.nit:5660 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5630 */
+  /* ./parser//parser.nit:5661 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5662 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5663 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5664 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5665 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5666 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5667 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5668 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5669 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5671 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5671);
+  }
+  /* ./parser//parser.nit:5673 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5673);
+  }
+  /* ./parser//parser.nit:5675 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5675);
+  }
+  /* ./parser//parser.nit:5677 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5677);
+  }
+  /* ./parser//parser.nit:5679 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5679);
+  }
+  /* ./parser//parser.nit:5681 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5681);
+  }
+  /* ./parser//parser.nit:5683 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5683);
+  }
+  /* ./parser//parser.nit:5685 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5685);
+  }
+  /* ./parser//parser.nit:5686 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* ./parser//parser.nit:5698 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:5699 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5699);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction134___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5704;
+  fra.me.meth = LOCATE_parser___ReduceAction134___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;
+  /* ./parser//parser.nit:5706 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:5707 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5631 */
+  /* ./parser//parser.nit:5708 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5632 */
+  /* ./parser//parser.nit:5709 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5633 */
+  /* ./parser//parser.nit:5710 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5634 */
+  /* ./parser//parser.nit:5711 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5635 */
+  /* ./parser//parser.nit:5712 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5637 */
+  /* ./parser//parser.nit:5714 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5637);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5714);
   }
-  /* ./parser//parser.nit:5639 */
+  /* ./parser//parser.nit:5716 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5716);
   }
-  /* ./parser//parser.nit:5641 */
+  /* ./parser//parser.nit:5718 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5718);
   }
-  /* ./parser//parser.nit:5643 */
+  /* ./parser//parser.nit:5720 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5720);
   }
-  /* ./parser//parser.nit:5645 */
+  /* ./parser//parser.nit:5722 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5722);
   }
-  /* ./parser//parser.nit:5646 */
+  /* ./parser//parser.nit:5723 */
   fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5655 */
+  /* ./parser//parser.nit:5732 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5656 */
+  /* ./parser//parser.nit:5733 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5656);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5733);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16591,14 +16870,14 @@ void parser___ReduceAction133___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction134___action(val_t p0, val_t p1){
+void parser___ReduceAction135___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5661;
-  fra.me.meth = LOCATE_parser___ReduceAction134___action;
+  fra.me.line = 5738;
+  fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -16612,69 +16891,67 @@ void parser___ReduceAction134___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5663 */
+  /* ./parser//parser.nit:5740 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5664 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5665 */
+  /* ./parser//parser.nit:5741 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5666 */
+  /* ./parser//parser.nit:5742 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5667 */
+  /* ./parser//parser.nit:5743 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5668 */
+  /* ./parser//parser.nit:5744 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5669 */
+  /* ./parser//parser.nit:5745 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5670 */
+  /* ./parser//parser.nit:5746 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5671 */
+  /* ./parser//parser.nit:5747 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5673 */
+  /* ./parser//parser.nit:5749 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5749);
   }
-  /* ./parser//parser.nit:5675 */
+  /* ./parser//parser.nit:5751 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5751);
   }
-  /* ./parser//parser.nit:5677 */
+  /* ./parser//parser.nit:5753 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5677);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5753);
   }
-  /* ./parser//parser.nit:5679 */
+  /* ./parser//parser.nit:5755 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5679);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5755);
   }
-  /* ./parser//parser.nit:5681 */
+  /* ./parser//parser.nit:5757 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5757);
   }
-  /* ./parser//parser.nit:5683 */
+  /* ./parser//parser.nit:5759 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5759);
   }
-  /* ./parser//parser.nit:5684 */
+  /* ./parser//parser.nit:5760 */
   fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5693 */
+  /* ./parser//parser.nit:5769 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5694 */
+  /* ./parser//parser.nit:5770 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5694);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5770);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16682,14 +16959,14 @@ void parser___ReduceAction134___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction135___action(val_t p0, val_t p1){
+void parser___ReduceAction136___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5699;
-  fra.me.meth = LOCATE_parser___ReduceAction135___action;
+  fra.me.line = 5775;
+  fra.me.meth = LOCATE_parser___ReduceAction136___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -16703,69 +16980,67 @@ void parser___ReduceAction135___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5701 */
+  /* ./parser//parser.nit:5777 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5702 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5703 */
+  /* ./parser//parser.nit:5778 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5704 */
+  /* ./parser//parser.nit:5779 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5705 */
+  /* ./parser//parser.nit:5780 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5706 */
+  /* ./parser//parser.nit:5781 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5707 */
+  /* ./parser//parser.nit:5782 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5708 */
+  /* ./parser//parser.nit:5783 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5709 */
+  /* ./parser//parser.nit:5784 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5711 */
+  /* ./parser//parser.nit:5786 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5711);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5786);
   }
-  /* ./parser//parser.nit:5713 */
+  /* ./parser//parser.nit:5788 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5713);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5788);
   }
-  /* ./parser//parser.nit:5715 */
+  /* ./parser//parser.nit:5790 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5715);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5790);
   }
-  /* ./parser//parser.nit:5717 */
+  /* ./parser//parser.nit:5792 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5717);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5792);
   }
-  /* ./parser//parser.nit:5719 */
+  /* ./parser//parser.nit:5794 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5719);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5794);
   }
-  /* ./parser//parser.nit:5721 */
+  /* ./parser//parser.nit:5796 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5796);
   }
-  /* ./parser//parser.nit:5722 */
+  /* ./parser//parser.nit:5797 */
   fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5731 */
+  /* ./parser//parser.nit:5806 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5732 */
+  /* ./parser//parser.nit:5807 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5732);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5807);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16773,14 +17048,14 @@ void parser___ReduceAction135___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction136___action(val_t p0, val_t p1){
+void parser___ReduceAction137___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5737;
-  fra.me.meth = LOCATE_parser___ReduceAction136___action;
+  fra.me.line = 5812;
+  fra.me.meth = LOCATE_parser___ReduceAction137___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -16795,77 +17070,75 @@ void parser___ReduceAction136___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5739 */
+  /* ./parser//parser.nit:5814 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5740 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5741 */
+  /* ./parser//parser.nit:5815 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5742 */
+  /* ./parser//parser.nit:5816 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5743 */
+  /* ./parser//parser.nit:5817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5744 */
+  /* ./parser//parser.nit:5818 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5745 */
+  /* ./parser//parser.nit:5819 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5746 */
+  /* ./parser//parser.nit:5820 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5747 */
+  /* ./parser//parser.nit:5821 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5748 */
+  /* ./parser//parser.nit:5822 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5750 */
+  /* ./parser//parser.nit:5824 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5824);
   }
-  /* ./parser//parser.nit:5752 */
+  /* ./parser//parser.nit:5826 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5826);
   }
-  /* ./parser//parser.nit:5754 */
+  /* ./parser//parser.nit:5828 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5754);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5828);
   }
-  /* ./parser//parser.nit:5756 */
+  /* ./parser//parser.nit:5830 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5756);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5830);
   }
-  /* ./parser//parser.nit:5758 */
+  /* ./parser//parser.nit:5832 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5758);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5832);
   }
-  /* ./parser//parser.nit:5760 */
+  /* ./parser//parser.nit:5834 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5760);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5834);
   }
-  /* ./parser//parser.nit:5762 */
+  /* ./parser//parser.nit:5836 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5762);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5836);
   }
-  /* ./parser//parser.nit:5763 */
+  /* ./parser//parser.nit:5837 */
   fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5772 */
+  /* ./parser//parser.nit:5846 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5773 */
+  /* ./parser//parser.nit:5847 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5773);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5847);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16873,14 +17146,14 @@ void parser___ReduceAction136___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction137___action(val_t p0, val_t p1){
+void parser___ReduceAction138___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5778;
-  fra.me.meth = LOCATE_parser___ReduceAction137___action;
+  fra.me.line = 5852;
+  fra.me.meth = LOCATE_parser___ReduceAction138___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -16893,57 +17166,61 @@ void parser___ReduceAction137___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5780 */
+  /* ./parser//parser.nit:5854 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5781 */
+  /* ./parser//parser.nit:5855 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5782 */
+  /* ./parser//parser.nit:5856 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5857 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5783 */
+  /* ./parser//parser.nit:5858 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5859 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5784 */
+  /* ./parser//parser.nit:5860 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5785 */
+  /* ./parser//parser.nit:5861 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5787 */
+  /* ./parser//parser.nit:5863 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5863);
   }
-  /* ./parser//parser.nit:5789 */
+  /* ./parser//parser.nit:5865 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5865);
   }
-  /* ./parser//parser.nit:5791 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  /* ./parser//parser.nit:5867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5791);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5867);
   }
-  /* ./parser//parser.nit:5793 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:5869 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5793);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5869);
   }
-  /* ./parser//parser.nit:5795 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5871 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5795);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5871);
   }
-  /* ./parser//parser.nit:5796 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5804 */
+  /* ./parser//parser.nit:5872 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5881 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5805 */
+  /* ./parser//parser.nit:5882 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5805);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5882);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16951,14 +17228,14 @@ void parser___ReduceAction137___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction138___action(val_t p0, val_t p1){
+void parser___ReduceAction139___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5810;
-  fra.me.meth = LOCATE_parser___ReduceAction138___action;
+  fra.me.line = 5887;
+  fra.me.meth = LOCATE_parser___ReduceAction139___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -16972,65 +17249,69 @@ void parser___ReduceAction138___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5812 */
+  /* ./parser//parser.nit:5889 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5813 */
+  /* ./parser//parser.nit:5890 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5814 */
+  /* ./parser//parser.nit:5891 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5892 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5815 */
+  /* ./parser//parser.nit:5893 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5894 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5816 */
+  /* ./parser//parser.nit:5895 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5817 */
+  /* ./parser//parser.nit:5896 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5818 */
+  /* ./parser//parser.nit:5897 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5820 */
+  /* ./parser//parser.nit:5899 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5820);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5899);
   }
-  /* ./parser//parser.nit:5822 */
+  /* ./parser//parser.nit:5901 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5822);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5901);
   }
-  /* ./parser//parser.nit:5824 */
+  /* ./parser//parser.nit:5903 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5824);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5903);
   }
-  /* ./parser//parser.nit:5826 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  /* ./parser//parser.nit:5905 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5905);
   }
-  /* ./parser//parser.nit:5828 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* ./parser//parser.nit:5907 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5907);
   }
-  /* ./parser//parser.nit:5830 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:5909 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5830);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5909);
   }
-  /* ./parser//parser.nit:5831 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5839 */
+  /* ./parser//parser.nit:5910 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5919 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5840 */
+  /* ./parser//parser.nit:5920 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5840);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5920);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17038,92 +17319,90 @@ void parser___ReduceAction138___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction139___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 5845;
-  fra.me.meth = LOCATE_parser___ReduceAction139___action;
+  fra.me.line = 5925;
+  fra.me.meth = LOCATE_parser___ReduceAction140___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;
-  /* ./parser//parser.nit:5847 */
+  /* ./parser//parser.nit:5927 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5848 */
+  /* ./parser//parser.nit:5928 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5850 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  /* ./parser//parser.nit:5929 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5930 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5931 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5932 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5933 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5934 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5935 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5937 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5937);
   }
-  /* ./parser//parser.nit:5851 */
-  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5855 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5856 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser.nit:5939 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5939);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction140___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 = 5861;
-  fra.me.meth = LOCATE_parser___ReduceAction140___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5863 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5864 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5865 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5867 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:5941 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5867);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5941);
   }
-  /* ./parser//parser.nit:5869 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  /* ./parser//parser.nit:5943 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5869);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5943);
   }
-  /* ./parser//parser.nit:5870 */
-  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5874 */
+  /* ./parser//parser.nit:5945 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5945);
+  }
+  /* ./parser//parser.nit:5947 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5947);
+  }
+  /* ./parser//parser.nit:5948 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5957 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5875 */
+  /* ./parser//parser.nit:5958 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5875);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5958);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17132,40 +17411,98 @@ void parser___ReduceAction140___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction141___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 5880;
+  fra.me.line = 5963;
   fra.me.meth = LOCATE_parser___ReduceAction141___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;
-  /* ./parser//parser.nit:5882 */
+  /* ./parser//parser.nit:5965 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5883 */
+  /* ./parser//parser.nit:5966 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5885 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit:5967 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5968 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5969 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5970 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5971 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5972 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5973 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5974 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:5976 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5976);
   }
-  /* ./parser//parser.nit:5886 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5891 */
+  /* ./parser//parser.nit:5978 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5978);
+  }
+  /* ./parser//parser.nit:5980 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5980);
+  }
+  /* ./parser//parser.nit:5982 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5982);
+  }
+  /* ./parser//parser.nit:5984 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5984);
+  }
+  /* ./parser//parser.nit:5986 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5986);
+  }
+  /* ./parser//parser.nit:5988 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5988);
+  }
+  /* ./parser//parser.nit:5989 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:5998 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5892 */
+  /* ./parser//parser.nit:5999 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5892);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5999);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17174,49 +17511,76 @@ void parser___ReduceAction141___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction142___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5897;
+  fra.me.line = 6004;
   fra.me.meth = LOCATE_parser___ReduceAction142___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;
-  /* ./parser//parser.nit:5899 */
+  /* ./parser//parser.nit:6006 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5900 */
+  /* ./parser//parser.nit:6007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5901 */
+  /* ./parser//parser.nit:6008 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5903 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6009 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6010 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6011 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6013 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5903);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6013);
   }
-  /* ./parser//parser.nit:5905 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit:6015 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6015);
   }
-  /* ./parser//parser.nit:5906 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5911 */
+  /* ./parser//parser.nit:6017 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6017);
+  }
+  /* ./parser//parser.nit:6019 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6019);
+  }
+  /* ./parser//parser.nit:6021 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6021);
+  }
+  /* ./parser//parser.nit:6022 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6030 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5912 */
+  /* ./parser//parser.nit:6031 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5912);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6031);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17225,49 +17589,85 @@ void parser___ReduceAction142___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction143___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  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 = 5917;
+  fra.me.line = 6036;
   fra.me.meth = LOCATE_parser___ReduceAction143___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;
-  /* ./parser//parser.nit:5919 */
+  /* ./parser//parser.nit:6038 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5920 */
+  /* ./parser//parser.nit:6039 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5921 */
+  /* ./parser//parser.nit:6040 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5923 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./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:6044 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6046 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5923);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6046);
   }
-  /* ./parser//parser.nit:5925 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit:6048 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6048);
   }
-  /* ./parser//parser.nit:5926 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5931 */
+  /* ./parser//parser.nit:6050 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6050);
+  }
+  /* ./parser//parser.nit:6052 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6052);
+  }
+  /* ./parser//parser.nit:6054 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6054);
+  }
+  /* ./parser//parser.nit:6056 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6056);
+  }
+  /* ./parser//parser.nit:6057 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6065 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5932 */
+  /* ./parser//parser.nit:6066 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5932);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6066);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17276,58 +17676,71 @@ void parser___ReduceAction143___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction144___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 = 5937;
+  fra.me.line = 6071;
   fra.me.meth = LOCATE_parser___ReduceAction144___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5939 */
+  /* ./parser//parser.nit:6073 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5940 */
+  /* ./parser//parser.nit:6074 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5941 */
+  /* ./parser//parser.nit:6075 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6076 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6077 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5942 */
+  /* ./parser//parser.nit:6078 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5944 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* ./parser//parser.nit:6079 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6081 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5944);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6081);
   }
-  /* ./parser//parser.nit:5946 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* ./parser//parser.nit:6083 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6083);
   }
-  /* ./parser//parser.nit:5948 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* ./parser//parser.nit:6085 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6085);
   }
-  /* ./parser//parser.nit:5949 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5954 */
+  /* ./parser//parser.nit:6087 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6087);
+  }
+  /* ./parser//parser.nit:6088 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:6098 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5955 */
+  /* ./parser//parser.nit:6099 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5955);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6099);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17336,32 +17749,80 @@ void parser___ReduceAction144___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction145___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5960;
+  fra.me.line = 6104;
   fra.me.meth = LOCATE_parser___ReduceAction145___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;
-  /* ./parser//parser.nit:5962 */
+  /* ./parser//parser.nit:6106 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5963 */
-  fra.me.REG[3] = NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility();
-  /* ./parser//parser.nit:5965 */
+  /* ./parser//parser.nit:6107 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6108 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6109 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6110 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6111 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6112 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6113 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6115 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6115);
+  }
+  /* ./parser//parser.nit:6117 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6117);
+  }
+  /* ./parser//parser.nit:6119 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6119);
+  }
+  /* ./parser//parser.nit:6121 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6121);
+  }
+  /* ./parser//parser.nit:6123 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6123);
+  }
+  /* ./parser//parser.nit:6124 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:6134 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5966 */
+  /* ./parser//parser.nit:6135 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5966);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6135);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17370,42 +17831,80 @@ void parser___ReduceAction145___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction146___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5971;
+  fra.me.line = 6140;
   fra.me.meth = LOCATE_parser___ReduceAction146___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;
-  /* ./parser//parser.nit:5973 */
+  /* ./parser//parser.nit:6142 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5974 */
+  /* ./parser//parser.nit:6143 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5975 */
+  /* ./parser//parser.nit:6144 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5977 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast nullable TKwprivate*/;
+  /* ./parser//parser.nit:6145 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6146 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6147 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6148 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6149 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6151 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5977);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6151);
   }
-  /* ./parser//parser.nit:5978 */
-  fra.me.REG[3] = NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:5981 */
+  /* ./parser//parser.nit:6153 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6153);
+  }
+  /* ./parser//parser.nit:6155 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6155);
+  }
+  /* ./parser//parser.nit:6157 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6157);
+  }
+  /* ./parser//parser.nit:6159 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6159);
+  }
+  /* ./parser//parser.nit:6160 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:6170 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5982 */
+  /* ./parser//parser.nit:6171 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5982);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6171);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17414,42 +17913,89 @@ void parser___ReduceAction146___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction147___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 5987;
+  fra.me.line = 6176;
   fra.me.meth = LOCATE_parser___ReduceAction147___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;
-  /* ./parser//parser.nit:5989 */
+  /* ./parser//parser.nit:6178 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5990 */
+  /* ./parser//parser.nit:6179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5991 */
+  /* ./parser//parser.nit:6180 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5993 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast nullable TKwprotected*/;
+  /* ./parser//parser.nit:6181 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6182 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6183 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6184 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6185 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6186 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6188 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5993);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6188);
   }
-  /* ./parser//parser.nit:5994 */
-  fra.me.REG[3] = NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:5997 */
+  /* ./parser//parser.nit:6190 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6190);
+  }
+  /* ./parser//parser.nit:6192 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6192);
+  }
+  /* ./parser//parser.nit:6194 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6194);
+  }
+  /* ./parser//parser.nit:6196 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6196);
+  }
+  /* ./parser//parser.nit:6198 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6198);
+  }
+  /* ./parser//parser.nit:6199 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:6209 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5998 */
+  /* ./parser//parser.nit:6210 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5998);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6210);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17458,42 +18004,80 @@ void parser___ReduceAction147___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction148___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6003;
+  fra.me.line = 6215;
   fra.me.meth = LOCATE_parser___ReduceAction148___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;
-  /* ./parser//parser.nit:6005 */
+  /* ./parser//parser.nit:6217 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6006 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6007 */
+  /* ./parser//parser.nit:6218 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6009 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast nullable TKwintrude*/;
+  /* ./parser//parser.nit:6219 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6220 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6221 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6222 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6223 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6224 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6226 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6009);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6226);
   }
-  /* ./parser//parser.nit:6010 */
-  fra.me.REG[3] = NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6013 */
+  /* ./parser//parser.nit:6228 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6228);
+  }
+  /* ./parser//parser.nit:6230 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6230);
+  }
+  /* ./parser//parser.nit:6232 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6232);
+  }
+  /* ./parser//parser.nit:6234 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6234);
+  }
+  /* ./parser//parser.nit:6235 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:6245 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6014 */
+  /* ./parser//parser.nit:6246 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6014);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6246);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17502,40 +18086,1801 @@ void parser___ReduceAction148___action(val_t p0, val_t p1){
   return;
 }
 void parser___ReduceAction149___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[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 = 6019;
+  fra.me.line = 6251;
   fra.me.meth = LOCATE_parser___ReduceAction149___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;
-  /* ./parser//parser.nit:6021 */
+  /* ./parser//parser.nit:6253 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6022 */
+  /* ./parser//parser.nit:6254 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6024 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:6255 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6256 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6257 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6258 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6259 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6260 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6261 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6263 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6263);
   }
-  /* ./parser//parser.nit:6025 */
-  fra.me.REG[3] = NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6028 */
+  /* ./parser//parser.nit:6265 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6265);
+  }
+  /* ./parser//parser.nit:6267 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6267);
+  }
+  /* ./parser//parser.nit:6269 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6269);
+  }
+  /* ./parser//parser.nit:6271 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6271);
+  }
+  /* ./parser//parser.nit:6273 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6273);
+  }
+  /* ./parser//parser.nit:6274 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:6284 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6285 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6285);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction150___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6290;
+  fra.me.meth = LOCATE_parser___ReduceAction150___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;
+  /* ./parser//parser.nit:6292 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6293 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6294 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6295 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6296 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6297 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6298 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6299 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6300 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6302 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6302);
+  }
+  /* ./parser//parser.nit:6304 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6304);
+  }
+  /* ./parser//parser.nit:6306 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6306);
+  }
+  /* ./parser//parser.nit:6308 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6308);
+  }
+  /* ./parser//parser.nit:6310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6310);
+  }
+  /* ./parser//parser.nit:6312 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6312);
+  }
+  /* ./parser//parser.nit:6313 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:6323 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6324 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6324);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction151___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6329;
+  fra.me.meth = LOCATE_parser___ReduceAction151___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;
+  /* ./parser//parser.nit:6331 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6332 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6333 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6334 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6335 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6336 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6337 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6338 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6339 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6340 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6342 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6342);
+  }
+  /* ./parser//parser.nit:6344 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6344);
+  }
+  /* ./parser//parser.nit:6346 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6346);
+  }
+  /* ./parser//parser.nit:6348 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6348);
+  }
+  /* ./parser//parser.nit:6350 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6350);
+  }
+  /* ./parser//parser.nit:6352 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6352);
+  }
+  /* ./parser//parser.nit:6354 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6354);
+  }
+  /* ./parser//parser.nit:6355 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:6365 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6366 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6366);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction152___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6371;
+  fra.me.meth = LOCATE_parser___ReduceAction152___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;
+  /* ./parser//parser.nit:6373 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6374 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6375 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6376 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6377 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6378 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6379 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6380 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6382 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6382);
+  }
+  /* ./parser//parser.nit:6384 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6384);
+  }
+  /* ./parser//parser.nit:6386 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6386);
+  }
+  /* ./parser//parser.nit:6388 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6388);
+  }
+  /* ./parser//parser.nit:6390 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6390);
+  }
+  /* ./parser//parser.nit:6391 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6401 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6402 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6402);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction153___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6407;
+  fra.me.meth = LOCATE_parser___ReduceAction153___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;
+  /* ./parser//parser.nit:6409 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6410 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6411 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6412 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6413 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6414 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6415 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6416 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6417 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6419 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6419);
+  }
+  /* ./parser//parser.nit:6421 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6421);
+  }
+  /* ./parser//parser.nit:6423 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6423);
+  }
+  /* ./parser//parser.nit:6425 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6425);
+  }
+  /* ./parser//parser.nit:6427 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6427);
+  }
+  /* ./parser//parser.nit:6429 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6429);
+  }
+  /* ./parser//parser.nit:6430 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6440 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6441 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6441);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction154___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6446;
+  fra.me.meth = LOCATE_parser___ReduceAction154___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;
+  /* ./parser//parser.nit:6448 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6449 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6450 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6451 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6452 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6453 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6454 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6455 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6456 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6458 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6458);
+  }
+  /* ./parser//parser.nit:6460 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6460);
+  }
+  /* ./parser//parser.nit:6462 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6462);
+  }
+  /* ./parser//parser.nit:6464 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6464);
+  }
+  /* ./parser//parser.nit:6466 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6466);
+  }
+  /* ./parser//parser.nit:6468 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6468);
+  }
+  /* ./parser//parser.nit:6469 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6479 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6480 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6480);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction155___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6485;
+  fra.me.meth = LOCATE_parser___ReduceAction155___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;
+  /* ./parser//parser.nit:6487 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6488 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6489 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6490 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6491 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6492 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6493 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6494 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6495 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6496 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6498 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6498);
+  }
+  /* ./parser//parser.nit:6500 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6500);
+  }
+  /* ./parser//parser.nit:6502 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6502);
+  }
+  /* ./parser//parser.nit:6504 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6504);
+  }
+  /* ./parser//parser.nit:6506 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6506);
+  }
+  /* ./parser//parser.nit:6508 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6508);
+  }
+  /* ./parser//parser.nit:6510 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6510);
+  }
+  /* ./parser//parser.nit:6511 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6521 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6522 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6522);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction156___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6527;
+  fra.me.meth = LOCATE_parser___ReduceAction156___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;
+  /* ./parser//parser.nit:6529 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6530 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6531 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6532 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6533 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6534 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6535 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6536 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6537 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6539 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6539);
+  }
+  /* ./parser//parser.nit:6541 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6541);
+  }
+  /* ./parser//parser.nit:6543 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6543);
+  }
+  /* ./parser//parser.nit:6545 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6545);
+  }
+  /* ./parser//parser.nit:6547 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6547);
+  }
+  /* ./parser//parser.nit:6549 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6549);
+  }
+  /* ./parser//parser.nit:6550 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6560 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6561 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6561);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction157___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 = 6566;
+  fra.me.meth = LOCATE_parser___ReduceAction157___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;
+  /* ./parser//parser.nit:6568 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6569 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6570 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6571 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6572 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6573 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6574 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6575 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6576 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6577 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6579 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6579);
+  }
+  /* ./parser//parser.nit:6581 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6581);
+  }
+  /* ./parser//parser.nit:6583 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6583);
+  }
+  /* ./parser//parser.nit:6585 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6585);
+  }
+  /* ./parser//parser.nit:6587 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6587);
+  }
+  /* ./parser//parser.nit:6589 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6589);
+  }
+  /* ./parser//parser.nit:6591 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6591);
+  }
+  /* ./parser//parser.nit:6592 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6602 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6603 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6603);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction158___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6608;
+  fra.me.meth = LOCATE_parser___ReduceAction158___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;
+  /* ./parser//parser.nit:6610 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6611 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6612 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6613 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6614 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6615 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6616 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6617 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6618 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6619 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6621 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6621);
+  }
+  /* ./parser//parser.nit:6623 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6623);
+  }
+  /* ./parser//parser.nit:6625 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6625);
+  }
+  /* ./parser//parser.nit:6627 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6627);
+  }
+  /* ./parser//parser.nit:6629 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6629);
+  }
+  /* ./parser//parser.nit:6631 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6631);
+  }
+  /* ./parser//parser.nit:6633 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6633);
+  }
+  /* ./parser//parser.nit:6634 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6644 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6645 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6645);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction159___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6650;
+  fra.me.meth = LOCATE_parser___ReduceAction159___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;
+  /* ./parser//parser.nit:6652 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6653 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6654 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6655 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6656 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6657 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6658 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6659 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6660 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6661 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6662 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6664 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6664);
+  }
+  /* ./parser//parser.nit:6666 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6666);
+  }
+  /* ./parser//parser.nit:6668 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6668);
+  }
+  /* ./parser//parser.nit:6670 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6670);
+  }
+  /* ./parser//parser.nit:6672 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6672);
+  }
+  /* ./parser//parser.nit:6674 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6674);
+  }
+  /* ./parser//parser.nit:6676 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6676);
+  }
+  /* ./parser//parser.nit:6678 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6678);
+  }
+  /* ./parser//parser.nit:6679 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6689 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6690 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6690);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction160___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 = 6695;
+  fra.me.meth = LOCATE_parser___ReduceAction160___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:6697 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6698 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6700 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6700);
+  }
+  /* ./parser//parser.nit:6701 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6705 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6706 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6706);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction161___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 = 6711;
+  fra.me.meth = LOCATE_parser___ReduceAction161___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:6713 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6714 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6715 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6717 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6717);
+  }
+  /* ./parser//parser.nit:6719 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6719);
+  }
+  /* ./parser//parser.nit:6720 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6724 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6725 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6725);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction162___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 = 6730;
+  fra.me.meth = LOCATE_parser___ReduceAction162___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:6732 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6733 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6735 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6735);
+  }
+  /* ./parser//parser.nit:6736 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6741 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6742 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6742);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction163___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 = 6747;
+  fra.me.meth = LOCATE_parser___ReduceAction163___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit: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]);
+  /* ./parser//parser.nit:6753 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6753);
+  }
+  /* ./parser//parser.nit:6755 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6755);
+  }
+  /* ./parser//parser.nit:6756 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:6761 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6762 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6762);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction164___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 = 6767;
+  fra.me.meth = LOCATE_parser___ReduceAction164___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:6769 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6770 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6771 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6773 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6773);
+  }
+  /* ./parser//parser.nit:6775 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6775);
+  }
+  /* ./parser//parser.nit:6776 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6781 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6782 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6782);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction165___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 = 6787;
+  fra.me.meth = LOCATE_parser___ReduceAction165___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:6789 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6790 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6791 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6792 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6794 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6794);
+  }
+  /* ./parser//parser.nit:6796 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6796);
+  }
+  /* ./parser//parser.nit:6798 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6798);
+  }
+  /* ./parser//parser.nit:6799 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:6804 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6805 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6805);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction166___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 = 6810;
+  fra.me.meth = LOCATE_parser___ReduceAction166___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:6812 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6813 */
+  fra.me.REG[3] = NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility();
+  /* ./parser//parser.nit:6815 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6816 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6816);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction167___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 = 6821;
+  fra.me.meth = LOCATE_parser___ReduceAction167___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:6823 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6824 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6825 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6827 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast nullable TKwprivate*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6827);
+  }
+  /* ./parser//parser.nit:6828 */
+  fra.me.REG[3] = NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6831 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6832 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6832);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction168___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 = 6837;
+  fra.me.meth = LOCATE_parser___ReduceAction168___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:6839 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6840 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6841 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6843 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast nullable TKwprotected*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6843);
+  }
+  /* ./parser//parser.nit:6844 */
+  fra.me.REG[3] = NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6847 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6848 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6848);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction169___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 = 6853;
+  fra.me.meth = LOCATE_parser___ReduceAction169___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:6855 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6856 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6857 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6859 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast nullable TKwintrude*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6859);
+  }
+  /* ./parser//parser.nit:6860 */
+  fra.me.REG[3] = NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
+  /* ./parser//parser.nit:6863 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6864 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6864);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction170___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 = 6869;
+  fra.me.meth = LOCATE_parser___ReduceAction170___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:6871 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6872 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6874 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6874);
+  }
+  /* ./parser//parser.nit:6875 */
+  fra.me.REG[3] = NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6878 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6879 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6879);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction171___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 = 6884;
+  fra.me.meth = LOCATE_parser___ReduceAction171___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:6886 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6887 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6889 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast nullable TPlus*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6889);
+  }
+  /* ./parser//parser.nit:6890 */
+  fra.me.REG[3] = NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6893 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6894 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6894);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction172___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 = 6899;
+  fra.me.meth = LOCATE_parser___ReduceAction172___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:6901 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6902 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6904 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6904);
+  }
+  /* ./parser//parser.nit:6905 */
+  fra.me.REG[3] = NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6908 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6909 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6909);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction173___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 = 6914;
+  fra.me.meth = LOCATE_parser___ReduceAction173___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:6916 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6917 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6919 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast nullable TStar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6919);
+  }
+  /* ./parser//parser.nit:6920 */
+  fra.me.REG[3] = NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6923 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6924 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6924);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction174___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 = 6929;
+  fra.me.meth = LOCATE_parser___ReduceAction174___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:6931 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6932 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6934 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast nullable TSlash*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6934);
+  }
+  /* ./parser//parser.nit:6935 */
+  fra.me.REG[3] = NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6938 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6939 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6939);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction175___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 = 6944;
+  fra.me.meth = LOCATE_parser___ReduceAction175___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:6946 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6947 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6949 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast nullable TPercent*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6949);
+  }
+  /* ./parser//parser.nit:6950 */
+  fra.me.REG[3] = NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6953 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:6954 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6954);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction176___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 = 6959;
+  fra.me.meth = LOCATE_parser___ReduceAction176___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:6961 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:6962 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:6964 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast nullable TEq*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6964);
+  }
+  /* ./parser//parser.nit:6965 */
+  fra.me.REG[3] = NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6968 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6029 */
+  /* ./parser//parser.nit:6969 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6029);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6969);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17543,14 +19888,14 @@ void parser___ReduceAction149___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction150___action(val_t p0, val_t p1){
+void parser___ReduceAction177___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6034;
-  fra.me.meth = LOCATE_parser___ReduceAction150___action;
+  fra.me.line = 6974;
+  fra.me.meth = LOCATE_parser___ReduceAction177___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17559,25 +19904,25 @@ void parser___ReduceAction150___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6036 */
+  /* ./parser//parser.nit:6976 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6037 */
+  /* ./parser//parser.nit:6977 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6039 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast nullable TPlus*/;
+  /* ./parser//parser.nit:6979 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast nullable TNe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6039);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6979);
   }
-  /* ./parser//parser.nit:6040 */
-  fra.me.REG[3] = NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6043 */
+  /* ./parser//parser.nit:6980 */
+  fra.me.REG[3] = NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6983 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6044 */
+  /* ./parser//parser.nit:6984 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6044);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6984);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17585,14 +19930,14 @@ void parser___ReduceAction150___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction151___action(val_t p0, val_t p1){
+void parser___ReduceAction178___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6049;
-  fra.me.meth = LOCATE_parser___ReduceAction151___action;
+  fra.me.line = 6989;
+  fra.me.meth = LOCATE_parser___ReduceAction178___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17601,25 +19946,25 @@ void parser___ReduceAction151___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6051 */
+  /* ./parser//parser.nit:6991 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6052 */
+  /* ./parser//parser.nit:6992 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6054 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
+  /* ./parser//parser.nit:6994 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast nullable TLe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6994);
   }
-  /* ./parser//parser.nit:6055 */
-  fra.me.REG[3] = NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6058 */
+  /* ./parser//parser.nit:6995 */
+  fra.me.REG[3] = NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:6998 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6059 */
+  /* ./parser//parser.nit:6999 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6059);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6999);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17627,14 +19972,14 @@ void parser___ReduceAction151___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction152___action(val_t p0, val_t p1){
+void parser___ReduceAction179___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6064;
-  fra.me.meth = LOCATE_parser___ReduceAction152___action;
+  fra.me.line = 7004;
+  fra.me.meth = LOCATE_parser___ReduceAction179___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17643,25 +19988,25 @@ void parser___ReduceAction152___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6066 */
+  /* ./parser//parser.nit:7006 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6067 */
+  /* ./parser//parser.nit:7007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6069 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast nullable TStar*/;
+  /* ./parser//parser.nit:7009 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast nullable TGe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7009);
   }
-  /* ./parser//parser.nit:6070 */
-  fra.me.REG[3] = NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6073 */
+  /* ./parser//parser.nit:7010 */
+  fra.me.REG[3] = NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7013 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6074 */
+  /* ./parser//parser.nit:7014 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6074);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7014);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17669,14 +20014,14 @@ void parser___ReduceAction152___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction153___action(val_t p0, val_t p1){
+void parser___ReduceAction180___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6079;
-  fra.me.meth = LOCATE_parser___ReduceAction153___action;
+  fra.me.line = 7019;
+  fra.me.meth = LOCATE_parser___ReduceAction180___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17685,25 +20030,25 @@ void parser___ReduceAction153___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6081 */
+  /* ./parser//parser.nit:7021 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6082 */
+  /* ./parser//parser.nit:7022 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6084 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast nullable TSlash*/;
+  /* ./parser//parser.nit:7024 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast nullable TLt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6084);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7024);
   }
-  /* ./parser//parser.nit:6085 */
-  fra.me.REG[3] = NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6088 */
+  /* ./parser//parser.nit:7025 */
+  fra.me.REG[3] = NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7028 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6089 */
+  /* ./parser//parser.nit:7029 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6089);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7029);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17711,14 +20056,14 @@ void parser___ReduceAction153___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction154___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 = 6094;
-  fra.me.meth = LOCATE_parser___ReduceAction154___action;
+  fra.me.line = 7034;
+  fra.me.meth = LOCATE_parser___ReduceAction181___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17727,25 +20072,25 @@ void parser___ReduceAction154___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6096 */
+  /* ./parser//parser.nit:7036 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6097 */
+  /* ./parser//parser.nit:7037 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6099 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast nullable TPercent*/;
+  /* ./parser//parser.nit:7039 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast nullable TGt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7039);
   }
-  /* ./parser//parser.nit:6100 */
-  fra.me.REG[3] = NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6103 */
+  /* ./parser//parser.nit:7040 */
+  fra.me.REG[3] = NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7043 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6104 */
+  /* ./parser//parser.nit:7044 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6104);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7044);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17753,14 +20098,14 @@ void parser___ReduceAction154___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction155___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[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 = 6109;
-  fra.me.meth = LOCATE_parser___ReduceAction155___action;
+  fra.me.line = 7049;
+  fra.me.meth = LOCATE_parser___ReduceAction182___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -17769,25 +20114,211 @@ void parser___ReduceAction155___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6111 */
+  /* ./parser//parser.nit:7051 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6112 */
+  /* ./parser//parser.nit:7052 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6114 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast nullable TEq*/;
+  /* ./parser//parser.nit:7054 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast nullable TLl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6114);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7054);
   }
-  /* ./parser//parser.nit:6115 */
-  fra.me.REG[3] = NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6118 */
+  /* ./parser//parser.nit:7055 */
+  fra.me.REG[3] = NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7058 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7059 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7059);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction183___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 = 7064;
+  fra.me.meth = LOCATE_parser___ReduceAction183___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:7066 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7067 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7069 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast nullable TGg*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7069);
+  }
+  /* ./parser//parser.nit:7070 */
+  fra.me.REG[3] = NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7073 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7074 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7074);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction184___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 = 7079;
+  fra.me.meth = LOCATE_parser___ReduceAction184___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7081 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7082 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7083 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7085 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7085);
+  }
+  /* ./parser//parser.nit:7087 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7087);
+  }
+  /* ./parser//parser.nit:7088 */
+  fra.me.REG[3] = NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7092 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7093 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7093);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction185___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 = 7098;
+  fra.me.meth = LOCATE_parser___ReduceAction185___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7100 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7101 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7103 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast nullable TStarship*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7103);
+  }
+  /* ./parser//parser.nit:7104 */
+  fra.me.REG[3] = NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
+  /* ./parser//parser.nit:7107 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7108 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7108);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction186___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 = 7113;
+  fra.me.meth = LOCATE_parser___ReduceAction186___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:7115 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7116 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7117 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7119 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7119);
+  }
+  /* ./parser//parser.nit:7121 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7121);
+  }
+  /* ./parser//parser.nit:7122 */
+  fra.me.REG[3] = NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7126 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6119 */
+  /* ./parser//parser.nit:7127 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6119);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7127);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17795,41 +20326,59 @@ void parser___ReduceAction155___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction156___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction187___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6124;
-  fra.me.meth = LOCATE_parser___ReduceAction156___action;
+  fra.me.line = 7132;
+  fra.me.meth = LOCATE_parser___ReduceAction187___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;
-  /* ./parser//parser.nit:6126 */
+  /* ./parser//parser.nit:7134 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6127 */
+  /* ./parser//parser.nit:7135 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6129 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast nullable TNe*/;
+  /* ./parser//parser.nit:7136 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7137 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7139 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7139);
   }
-  /* ./parser//parser.nit:6130 */
-  fra.me.REG[3] = NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6133 */
+  /* ./parser//parser.nit:7141 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7141);
+  }
+  /* ./parser//parser.nit:7143 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7143);
+  }
+  /* ./parser//parser.nit:7144 */
+  fra.me.REG[3] = NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7149 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6134 */
+  /* ./parser//parser.nit:7150 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7150);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17837,41 +20386,59 @@ void parser___ReduceAction156___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction157___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} 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 = 6139;
-  fra.me.meth = LOCATE_parser___ReduceAction157___action;
+  fra.me.line = 7155;
+  fra.me.meth = LOCATE_parser___ReduceAction188___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;
-  /* ./parser//parser.nit:6141 */
+  /* ./parser//parser.nit:7157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6142 */
+  /* ./parser//parser.nit:7158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6144 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast nullable TLe*/;
+  /* ./parser//parser.nit:7159 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7160 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7161 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7163 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7163);
   }
-  /* ./parser//parser.nit:6145 */
-  fra.me.REG[3] = NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6148 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6149 */
+  /* ./parser//parser.nit:7165 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7165);
+  }
+  /* ./parser//parser.nit:7166 */
+  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:7167 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* ./parser//parser.nit:7172 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7173 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6149);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7173);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17879,41 +20446,71 @@ void parser___ReduceAction157___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction158___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction189___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6154;
-  fra.me.meth = LOCATE_parser___ReduceAction158___action;
+  fra.me.line = 7178;
+  fra.me.meth = LOCATE_parser___ReduceAction189___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;
-  /* ./parser//parser.nit:6156 */
+  /* ./parser//parser.nit:7180 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6157 */
+  /* ./parser//parser.nit:7181 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6159 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast nullable TGe*/;
+  /* ./parser//parser.nit:7182 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7183 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7184 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7185 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7187 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7187);
   }
-  /* ./parser//parser.nit:6160 */
-  fra.me.REG[3] = NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6163 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6164 */
+  /* ./parser//parser.nit:7188 */
+  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:7190 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7190);
+  }
+  /* ./parser//parser.nit:7192 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7192);
+  }
+  /* ./parser//parser.nit:7193 */
+  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:7194 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[4], fra.me.REG[7]);
+  /* ./parser//parser.nit:7199 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* ./parser//parser.nit:7200 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6164);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7200);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17921,41 +20518,49 @@ void parser___ReduceAction158___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction159___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction190___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 = 6169;
-  fra.me.meth = LOCATE_parser___ReduceAction159___action;
+  fra.me.line = 7205;
+  fra.me.meth = LOCATE_parser___ReduceAction190___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;
-  /* ./parser//parser.nit:6171 */
+  /* ./parser//parser.nit:7207 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6172 */
+  /* ./parser//parser.nit:7208 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6174 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast nullable TLt*/;
+  /* ./parser//parser.nit:7209 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7210 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7211 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7213 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7213);
   }
-  /* ./parser//parser.nit:6175 */
-  fra.me.REG[3] = NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6178 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6179 */
+  /* ./parser//parser.nit:7214 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* ./parser//parser.nit:7219 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7220 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6179);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7220);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17963,41 +20568,61 @@ void parser___ReduceAction159___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction160___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} 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 = 6184;
-  fra.me.meth = LOCATE_parser___ReduceAction160___action;
+  fra.me.line = 7225;
+  fra.me.meth = LOCATE_parser___ReduceAction191___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;
-  /* ./parser//parser.nit:6186 */
+  /* ./parser//parser.nit:7227 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6187 */
+  /* ./parser//parser.nit:7228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6189 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast nullable TGt*/;
+  /* ./parser//parser.nit:7229 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7230 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7231 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7232 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7234 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6189);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7234);
   }
-  /* ./parser//parser.nit:6190 */
-  fra.me.REG[3] = NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6193 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6194 */
+  /* ./parser//parser.nit:7235 */
+  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:7237 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7237);
+  }
+  /* ./parser//parser.nit:7238 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
+  /* ./parser//parser.nit:7243 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7244 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6194);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7244);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18005,41 +20630,50 @@ void parser___ReduceAction160___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction161___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction192___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 = 6199;
-  fra.me.meth = LOCATE_parser___ReduceAction161___action;
+  fra.me.line = 7249;
+  fra.me.meth = LOCATE_parser___ReduceAction192___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;
-  /* ./parser//parser.nit:6201 */
+  /* ./parser//parser.nit:7251 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6202 */
+  /* ./parser//parser.nit:7252 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6204 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast nullable TLl*/;
+  /* ./parser//parser.nit:7253 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7254 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7256 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6204);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7256);
   }
-  /* ./parser//parser.nit:6205 */
-  fra.me.REG[3] = NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6208 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6209 */
+  /* ./parser//parser.nit:7257 */
+  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:7258 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:7263 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7264 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6209);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7264);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18047,41 +20681,62 @@ void parser___ReduceAction161___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction162___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 = 6214;
-  fra.me.meth = LOCATE_parser___ReduceAction162___action;
+  fra.me.line = 7269;
+  fra.me.meth = LOCATE_parser___ReduceAction193___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;
-  /* ./parser//parser.nit:6216 */
+  /* ./parser//parser.nit:7271 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6217 */
+  /* ./parser//parser.nit:7272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6219 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast nullable TGg*/;
+  /* ./parser//parser.nit:7273 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7274 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7275 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7277 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7277);
   }
-  /* ./parser//parser.nit:6220 */
-  fra.me.REG[3] = NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6223 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6224 */
+  /* ./parser//parser.nit:7278 */
+  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:7280 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7280);
+  }
+  /* ./parser//parser.nit:7281 */
+  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:7282 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
+  /* ./parser//parser.nit:7287 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7288 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6224);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7288);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18089,50 +20744,40 @@ void parser___ReduceAction162___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction163___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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6229;
-  fra.me.meth = LOCATE_parser___ReduceAction163___action;
+  fra.me.line = 7293;
+  fra.me.meth = LOCATE_parser___ReduceAction194___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6231 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6232 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6233 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6235 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6235);
-  }
-  /* ./parser//parser.nit:6237 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6237);
-  }
-  /* ./parser//parser.nit:6238 */
-  fra.me.REG[3] = NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6242 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6243 */
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./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[3] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7298 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7299 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* ./parser//parser.nit:7304 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7305 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6243);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7305);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18140,41 +20785,52 @@ void parser___ReduceAction163___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction164___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6248;
-  fra.me.meth = LOCATE_parser___ReduceAction164___action;
+  fra.me.line = 7310;
+  fra.me.meth = LOCATE_parser___ReduceAction195___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;
-  /* ./parser//parser.nit:6250 */
+  /* ./parser//parser.nit:7312 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6251 */
+  /* ./parser//parser.nit:7313 */
   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_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast nullable TStarship*/;
+  /* ./parser//parser.nit:7314 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7315 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7316 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7318 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7318);
   }
-  /* ./parser//parser.nit:6254 */
-  fra.me.REG[3] = NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6257 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6258 */
+  /* ./parser//parser.nit:7319 */
+  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:7320 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:7325 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7326 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6258);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7326);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18182,14 +20838,14 @@ void parser___ReduceAction164___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction165___action(val_t p0, val_t p1){
+void parser___ReduceAction196___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6263;
-  fra.me.meth = LOCATE_parser___ReduceAction165___action;
+  fra.me.line = 7331;
+  fra.me.meth = LOCATE_parser___ReduceAction196___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -18199,33 +20855,21 @@ void parser___ReduceAction165___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6265 */
+  /* ./parser//parser.nit:7333 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6266 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6267 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6269 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6269);
-  }
-  /* ./parser//parser.nit:6271 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6271);
-  }
-  /* ./parser//parser.nit:6272 */
-  fra.me.REG[3] = NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6276 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6277 */
+  /* ./parser//parser.nit:7334 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7335 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7336 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* ./parser//parser.nit:7341 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7342 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6277);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7342);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18233,14 +20877,14 @@ void parser___ReduceAction165___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction166___action(val_t p0, val_t p1){
+void parser___ReduceAction197___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6282;
-  fra.me.meth = LOCATE_parser___ReduceAction166___action;
+  fra.me.line = 7347;
+  fra.me.meth = LOCATE_parser___ReduceAction197___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -18251,41 +20895,32 @@ void parser___ReduceAction166___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6284 */
+  /* ./parser//parser.nit:7349 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6285 */
+  /* ./parser//parser.nit:7350 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6286 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6287 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6289 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6289);
-  }
-  /* ./parser//parser.nit:6291 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6291);
-  }
-  /* ./parser//parser.nit:6293 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* ./parser//parser.nit:7351 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7352 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7354 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6293);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7354);
   }
-  /* ./parser//parser.nit:6294 */
-  fra.me.REG[3] = NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6299 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6300 */
+  /* ./parser//parser.nit:7355 */
+  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:7356 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
+  /* ./parser//parser.nit:7361 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7362 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7362);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18293,59 +20928,47 @@ void parser___ReduceAction166___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction167___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction198___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 = 6305;
-  fra.me.meth = LOCATE_parser___ReduceAction167___action;
+  fra.me.line = 7367;
+  fra.me.meth = LOCATE_parser___ReduceAction198___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;
-  /* ./parser//parser.nit:6307 */
+  /* ./parser//parser.nit:7369 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6308 */
+  /* ./parser//parser.nit:7370 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6309 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6310 */
+  /* ./parser//parser.nit:7371 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7372 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6311 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6313 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6313);
-  }
-  /* ./parser//parser.nit:6315 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7374 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7374);
   }
-  /* ./parser//parser.nit:6316 */
-  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:6317 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:6322 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6323 */
+  /* ./parser//parser.nit:7375 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* ./parser//parser.nit:7380 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7381 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6323);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7381);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18353,16 +20976,16 @@ void parser___ReduceAction167___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction168___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction199___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 = 6328;
-  fra.me.meth = LOCATE_parser___ReduceAction168___action;
+  fra.me.line = 7386;
+  fra.me.meth = LOCATE_parser___ReduceAction199___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;
@@ -18370,54 +20993,42 @@ void parser___ReduceAction168___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6330 */
+  /* ./parser//parser.nit:7388 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6331 */
+  /* ./parser//parser.nit:7389 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6332 */
+  /* ./parser//parser.nit:7390 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6333 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6334 */
+  /* ./parser//parser.nit:7391 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7392 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6335 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6337 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6337);
-  }
-  /* ./parser//parser.nit:6338 */
-  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:6340 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7394 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7394);
   }
-  /* ./parser//parser.nit:6342 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7395 */
+  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:7397 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7397);
   }
-  /* ./parser//parser.nit:6343 */
-  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:6344 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:6349 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:6350 */
+  /* ./parser//parser.nit:7398 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
+  /* ./parser//parser.nit:7403 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7404 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6350);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7404);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18425,49 +21036,63 @@ void parser___ReduceAction168___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction169___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6355;
-  fra.me.meth = LOCATE_parser___ReduceAction169___action;
+  fra.me.line = 7409;
+  fra.me.meth = LOCATE_parser___ReduceAction200___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;
-  /* ./parser//parser.nit:6357 */
+  /* ./parser//parser.nit:7411 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6358 */
+  /* ./parser//parser.nit:7412 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6359 */
+  /* ./parser//parser.nit:7413 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7414 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6360 */
+  /* ./parser//parser.nit:7415 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7416 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7417 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6361 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6363 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7419 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6363);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* ./parser//parser.nit:6364 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:6369 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6370 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7420 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:7422 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7423 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6370);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7423);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18475,61 +21100,75 @@ void parser___ReduceAction169___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction170___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction201___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 = 6375;
-  fra.me.meth = LOCATE_parser___ReduceAction170___action;
+  fra.me.line = 7428;
+  fra.me.meth = LOCATE_parser___ReduceAction201___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;
-  /* ./parser//parser.nit:6377 */
+  /* ./parser//parser.nit:7430 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6378 */
+  /* ./parser//parser.nit:7431 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6379 */
+  /* ./parser//parser.nit:7432 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6380 */
+  /* ./parser//parser.nit:7433 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7434 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6381 */
+  /* ./parser//parser.nit:7435 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7436 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7437 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6382 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6384 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7440 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7440);
   }
-  /* ./parser//parser.nit:6385 */
-  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:6387 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7441 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6387);
+    /* ./parser//parser.nit:7442 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:6388 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:6393 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6394 */
+  /* ./parser//parser.nit:7444 */
+  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:7445 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7446 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6394);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7446);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18537,50 +21176,39 @@ void parser___ReduceAction170___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction171___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction202___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 = 6399;
-  fra.me.meth = LOCATE_parser___ReduceAction171___action;
+  fra.me.line = 7451;
+  fra.me.meth = LOCATE_parser___ReduceAction202___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;
-  /* ./parser//parser.nit:6401 */
+  /* ./parser//parser.nit:7453 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6402 */
+  /* ./parser//parser.nit:7454 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6403 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6404 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6406 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6406);
-  }
-  /* ./parser//parser.nit:6407 */
-  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:6408 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6413 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6414 */
+  /* ./parser//parser.nit:7455 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7456 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7457 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7458 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7459 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6414);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7459);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18588,62 +21216,38 @@ void parser___ReduceAction171___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction172___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction203___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 = 6419;
-  fra.me.meth = LOCATE_parser___ReduceAction172___action;
+  fra.me.line = 7464;
+  fra.me.meth = LOCATE_parser___ReduceAction203___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;
-  /* ./parser//parser.nit:6421 */
+  /* ./parser//parser.nit:7466 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6422 */
+  /* ./parser//parser.nit:7467 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6423 */
+  /* ./parser//parser.nit:7468 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6424 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6425 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6427 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6427);
-  }
-  /* ./parser//parser.nit:6428 */
-  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:6430 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6430);
-  }
-  /* ./parser//parser.nit:6431 */
-  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:6432 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:6437 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6438 */
+  /* ./parser//parser.nit:7469 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7471 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7472 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6438);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7472);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18651,40 +21255,41 @@ void parser___ReduceAction172___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction173___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} 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 = 6443;
-  fra.me.meth = LOCATE_parser___ReduceAction173___action;
+  fra.me.line = 7477;
+  fra.me.meth = LOCATE_parser___ReduceAction204___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;
-  /* ./parser//parser.nit:6445 */
+  /* ./parser//parser.nit:7479 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6446 */
+  /* ./parser//parser.nit:7480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6447 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6448 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6449 */
-  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:6454 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6455 */
+  /* ./parser//parser.nit:7482 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7482);
+  }
+  /* ./parser//parser.nit:7483 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* ./parser//parser.nit:7488 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7489 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6455);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7489);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18692,52 +21297,50 @@ void parser___ReduceAction173___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction174___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction205___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 = 6460;
-  fra.me.meth = LOCATE_parser___ReduceAction174___action;
+  fra.me.line = 7494;
+  fra.me.meth = LOCATE_parser___ReduceAction205___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;
-  /* ./parser//parser.nit:6462 */
+  /* ./parser//parser.nit:7496 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6463 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6464 */
+  /* ./parser//parser.nit:7497 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6465 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6466 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6468 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7498 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7500 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7500);
   }
-  /* ./parser//parser.nit:6469 */
-  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:6470 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6475 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6476 */
+  /* ./parser//parser.nit:7502 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7502);
+  }
+  /* ./parser//parser.nit:7503 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7508 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7509 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6476);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7509);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18745,38 +21348,59 @@ void parser___ReduceAction174___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction175___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction206___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 = 6481;
-  fra.me.meth = LOCATE_parser___ReduceAction175___action;
+  fra.me.line = 7514;
+  fra.me.meth = LOCATE_parser___ReduceAction206___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;
-  /* ./parser//parser.nit:6483 */
+  /* ./parser//parser.nit:7516 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6484 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6485 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6486 */
-  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:6491 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6492 */
+  /* ./parser//parser.nit:7517 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7518 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7519 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7521 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7521);
+  }
+  /* ./parser//parser.nit:7523 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7523);
+  }
+  /* ./parser//parser.nit:7525 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7525);
+  }
+  /* ./parser//parser.nit:7526 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7531 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7532 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6492);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7532);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18784,50 +21408,47 @@ void parser___ReduceAction175___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction176___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction207___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 = 6497;
-  fra.me.meth = LOCATE_parser___ReduceAction176___action;
+  fra.me.line = 7537;
+  fra.me.meth = LOCATE_parser___ReduceAction207___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;
-  /* ./parser//parser.nit:6499 */
+  /* ./parser//parser.nit:7539 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6500 */
+  /* ./parser//parser.nit:7540 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6501 */
+  /* ./parser//parser.nit:7541 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7542 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6502 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6504 */
+  /* ./parser//parser.nit:7544 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7544);
   }
-  /* ./parser//parser.nit:6505 */
+  /* ./parser//parser.nit:7545 */
   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:6506 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6511 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6512 */
+  /* ./parser//parser.nit:7546 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:7547 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6512);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7547);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18835,14 +21456,14 @@ void parser___ReduceAction176___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction177___action(val_t p0, val_t p1){
+void parser___ReduceAction208___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6517;
-  fra.me.meth = LOCATE_parser___ReduceAction177___action;
+  fra.me.line = 7552;
+  fra.me.meth = LOCATE_parser___ReduceAction208___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -18853,29 +21474,43 @@ void parser___ReduceAction177___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6519 */
+  /* ./parser//parser.nit:7554 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6520 */
+  /* ./parser//parser.nit:7555 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6521 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6522 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6524 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7556 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7557 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7558 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7560 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6524);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7560);
   }
-  /* ./parser//parser.nit:6525 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:6530 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6531 */
+  /* ./parser//parser.nit:7562 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7562);
+  }
+  /* ./parser//parser.nit:7564 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7564);
+  }
+  /* ./parser//parser.nit:7565 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7572 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7573 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6531);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7573);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18883,14 +21518,14 @@ void parser___ReduceAction177___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction178___action(val_t p0, val_t p1){
+void parser___ReduceAction209___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6536;
-  fra.me.meth = LOCATE_parser___ReduceAction178___action;
+  fra.me.line = 7578;
+  fra.me.meth = LOCATE_parser___ReduceAction209___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -18902,40 +21537,51 @@ void parser___ReduceAction178___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6538 */
+  /* ./parser//parser.nit:7580 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6539 */
+  /* ./parser//parser.nit:7581 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7582 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6540 */
+  /* ./parser//parser.nit:7583 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6541 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6542 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6544 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7584 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7585 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7587 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7587);
+  }
+  /* ./parser//parser.nit:7589 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7589);
   }
-  /* ./parser//parser.nit:6545 */
-  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:6547 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7591 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7591);
   }
-  /* ./parser//parser.nit:6548 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:6553 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6554 */
+  /* ./parser//parser.nit:7593 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7593);
+  }
+  /* ./parser//parser.nit:7594 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* ./parser//parser.nit:7601 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7602 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6554);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7602);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18943,63 +21589,72 @@ void parser___ReduceAction178___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction179___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction210___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 = 6559;
-  fra.me.meth = LOCATE_parser___ReduceAction179___action;
+  fra.me.line = 7607;
+  fra.me.meth = LOCATE_parser___ReduceAction210___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;
-  /* ./parser//parser.nit:6561 */
+  /* ./parser//parser.nit:7609 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6562 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6563 */
+  /* ./parser//parser.nit:7610 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6564 */
+  /* ./parser//parser.nit:7611 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6565 */
+  /* ./parser//parser.nit:7612 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6566 */
+  /* ./parser//parser.nit:7613 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6567 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6569 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser.nit:7614 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7615 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7617 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7617);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:7619 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:6570 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7619);
   }
-  /* ./parser//parser.nit:6572 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6573 */
+  /* ./parser//parser.nit:7621 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7621);
+  }
+  /* ./parser//parser.nit:7623 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7623);
+  }
+  /* ./parser//parser.nit:7624 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7631 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7632 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6573);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7632);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19007,75 +21662,81 @@ void parser___ReduceAction179___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction180___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6578;
-  fra.me.meth = LOCATE_parser___ReduceAction180___action;
+  fra.me.line = 7637;
+  fra.me.meth = LOCATE_parser___ReduceAction211___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;
-  /* ./parser//parser.nit:6580 */
+  /* ./parser//parser.nit:7639 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6581 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6582 */
+  /* ./parser//parser.nit:7640 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6583 */
+  /* ./parser//parser.nit:7641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6584 */
+  /* ./parser//parser.nit:7642 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6585 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6586 */
+  /* ./parser//parser.nit:7643 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7644 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6587 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6590 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* ./parser//parser.nit:7645 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7646 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7648 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7648);
   }
-  /* ./parser//parser.nit:6591 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser.nit:7650 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7650);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./parser//parser.nit:7652 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:6592 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7652);
   }
-  /* ./parser//parser.nit:6594 */
-  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:6595 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6596 */
+  /* ./parser//parser.nit:7654 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7654);
+  }
+  /* ./parser//parser.nit:7656 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7656);
+  }
+  /* ./parser//parser.nit:7657 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7664 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7665 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6596);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7665);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19083,39 +21744,74 @@ void parser___ReduceAction180___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction181___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction212___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 = 6601;
-  fra.me.meth = LOCATE_parser___ReduceAction181___action;
+  fra.me.line = 7670;
+  fra.me.meth = LOCATE_parser___ReduceAction212___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;
-  /* ./parser//parser.nit:6603 */
+  /* ./parser//parser.nit:7672 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6604 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6605 */
+  /* ./parser//parser.nit:7673 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6606 */
+  /* ./parser//parser.nit:7674 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6607 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6608 */
+  /* ./parser//parser.nit:7675 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7676 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7677 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7678 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7679 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7681 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7681);
+  }
+  /* ./parser//parser.nit:7683 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7683);
+  }
+  /* ./parser//parser.nit:7685 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7685);
+  }
+  /* ./parser//parser.nit:7687 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7687);
+  }
+  /* ./parser//parser.nit:7688 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7695 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6609 */
+  /* ./parser//parser.nit:7696 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7696);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19123,38 +21819,83 @@ void parser___ReduceAction181___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction182___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[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6614;
-  fra.me.meth = LOCATE_parser___ReduceAction182___action;
+  fra.me.line = 7701;
+  fra.me.meth = LOCATE_parser___ReduceAction213___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;
-  /* ./parser//parser.nit:6616 */
+  /* ./parser//parser.nit:7703 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6617 */
+  /* ./parser//parser.nit:7704 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6618 */
+  /* ./parser//parser.nit:7705 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7706 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6619 */
+  /* ./parser//parser.nit:7707 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6621 */
+  /* ./parser//parser.nit:7708 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7709 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7710 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7711 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7713 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7713);
+  }
+  /* ./parser//parser.nit:7715 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7715);
+  }
+  /* ./parser//parser.nit:7717 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7717);
+  }
+  /* ./parser//parser.nit:7719 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7719);
+  }
+  /* ./parser//parser.nit:7721 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7721);
+  }
+  /* ./parser//parser.nit:7722 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7729 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6622 */
+  /* ./parser//parser.nit:7730 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6622);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7730);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19162,14 +21903,14 @@ void parser___ReduceAction182___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction183___action(val_t p0, val_t p1){
+void parser___ReduceAction214___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6627;
-  fra.me.meth = LOCATE_parser___ReduceAction183___action;
+  fra.me.line = 7735;
+  fra.me.meth = LOCATE_parser___ReduceAction214___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -19178,25 +21919,25 @@ void parser___ReduceAction183___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6629 */
+  /* ./parser//parser.nit:7737 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6630 */
+  /* ./parser//parser.nit:7738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6632 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7740 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6632);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7740);
   }
-  /* ./parser//parser.nit:6633 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:6638 */
+  /* ./parser//parser.nit:7741 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
+  /* ./parser//parser.nit:7745 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6639 */
+  /* ./parser//parser.nit:7746 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6639);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7746);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19204,50 +21945,74 @@ void parser___ReduceAction183___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction184___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction215___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 = 6644;
-  fra.me.meth = LOCATE_parser___ReduceAction184___action;
+  fra.me.line = 7751;
+  fra.me.meth = LOCATE_parser___ReduceAction215___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;
-  /* ./parser//parser.nit:6646 */
+  /* ./parser//parser.nit:7753 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6647 */
+  /* ./parser//parser.nit:7754 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6648 */
+  /* ./parser//parser.nit:7755 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6650 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7756 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7757 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7759 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7759);
+  }
+  /* ./parser//parser.nit:7761 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7761);
+  }
+  /* ./parser//parser.nit:7762 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6650);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* ./parser//parser.nit:6652 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6652);
+    /* ./parser//parser.nit:7763 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:6653 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:6658 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6659 */
+  /* ./parser//parser.nit:7765 */
+  fra.me.REG[5] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
+  /* ./parser//parser.nit:7769 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:7770 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6659);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7770);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19255,59 +22020,86 @@ void parser___ReduceAction184___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction185___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6664;
-  fra.me.meth = LOCATE_parser___ReduceAction185___action;
+  fra.me.line = 7775;
+  fra.me.meth = LOCATE_parser___ReduceAction216___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6666 */
+  /* ./parser//parser.nit:7777 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6667 */
+  /* ./parser//parser.nit:7778 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6668 */
+  /* ./parser//parser.nit:7779 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6669 */
+  /* ./parser//parser.nit:7780 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6671 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7781 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7782 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:7784 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7784);
   }
-  /* ./parser//parser.nit:6673 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* ./parser//parser.nit:7786 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7786);
   }
-  /* ./parser//parser.nit:6675 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
+  /* ./parser//parser.nit:7788 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7788);
   }
-  /* ./parser//parser.nit:6676 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6681 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6682 */
+  /* ./parser//parser.nit:7789 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:7790 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+  }
+  /* ./parser//parser.nit:7792 */
+  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:7793 */
+  fra.me.REG[6] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
+  /* ./parser//parser.nit:7797 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* ./parser//parser.nit:7798 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6682);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7798);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19315,14 +22107,14 @@ void parser___ReduceAction185___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction186___action(val_t p0, val_t p1){
+void parser___ReduceAction217___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6687;
-  fra.me.meth = LOCATE_parser___ReduceAction186___action;
+  fra.me.line = 7803;
+  fra.me.meth = LOCATE_parser___ReduceAction217___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -19332,30 +22124,21 @@ void parser___ReduceAction186___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6689 */
+  /* ./parser//parser.nit:7805 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6690 */
+  /* ./parser//parser.nit:7806 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6691 */
+  /* ./parser//parser.nit:7807 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6692 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6694 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6694);
-  }
-  /* ./parser//parser.nit:6695 */
-  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:6696 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6697 */
+  /* ./parser//parser.nit:7808 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7810 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7811 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6697);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7811);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19363,61 +22146,33 @@ void parser___ReduceAction186___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction187___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction218___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 = 6702;
-  fra.me.meth = LOCATE_parser___ReduceAction187___action;
+  fra.me.line = 7816;
+  fra.me.meth = LOCATE_parser___ReduceAction218___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;
-  /* ./parser//parser.nit:6704 */
+  /* ./parser//parser.nit:7818 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6705 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6706 */
+  /* ./parser//parser.nit:7819 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6707 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6708 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6710 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6710);
-  }
-  /* ./parser//parser.nit:6712 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6712);
-  }
-  /* ./parser//parser.nit:6714 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6714);
-  }
-  /* ./parser//parser.nit:6715 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:6722 */
+  /* ./parser//parser.nit:7821 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6723 */
+  /* ./parser//parser.nit:7822 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6723);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7822);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19425,70 +22180,41 @@ void parser___ReduceAction187___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction188___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} 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 tmp;
   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___ReduceAction188___action;
+  fra.me.line = 7827;
+  fra.me.meth = LOCATE_parser___ReduceAction220___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;
-  /* ./parser//parser.nit:6730 */
+  /* ./parser//parser.nit:7829 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6731 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6732 */
+  /* ./parser//parser.nit:7830 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6733 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6734 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6735 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6737 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6737);
-  }
-  /* ./parser//parser.nit:6739 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6739);
-  }
-  /* ./parser//parser.nit:6741 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6741);
-  }
-  /* ./parser//parser.nit:6743 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7832 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7832);
   }
-  /* ./parser//parser.nit:6744 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:6751 */
+  /* ./parser//parser.nit:7833 */
+  fra.me.REG[3] = NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
+  /* ./parser//parser.nit:7836 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6752 */
+  /* ./parser//parser.nit:7837 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6752);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7837);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19496,72 +22222,41 @@ void parser___ReduceAction188___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction189___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[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 = 6757;
-  fra.me.meth = LOCATE_parser___ReduceAction189___action;
+  fra.me.line = 7842;
+  fra.me.meth = LOCATE_parser___ReduceAction221___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;
-  /* ./parser//parser.nit:6759 */
+  /* ./parser//parser.nit:7844 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6760 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6761 */
+  /* ./parser//parser.nit:7845 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6762 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6763 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6764 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6765 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6767 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6767);
-  }
-  /* ./parser//parser.nit:6769 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6769);
-  }
-  /* ./parser//parser.nit:6771 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7847 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6771);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7847);
   }
-  /* ./parser//parser.nit:6773 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6773);
-  }
-  /* ./parser//parser.nit:6774 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6781 */
+  /* ./parser//parser.nit:7848 */
+  fra.me.REG[3] = NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
+  /* ./parser//parser.nit:7851 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6782 */
+  /* ./parser//parser.nit:7852 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6782);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7852);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19569,81 +22264,101 @@ void parser___ReduceAction189___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction190___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction222___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 = 6787;
-  fra.me.meth = LOCATE_parser___ReduceAction190___action;
+  fra.me.line = 7857;
+  fra.me.meth = LOCATE_parser___ReduceAction222___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;
-  /* ./parser//parser.nit:6789 */
+  /* ./parser//parser.nit:7859 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6790 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6791 */
+  /* ./parser//parser.nit:7860 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6792 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6793 */
+  /* ./parser//parser.nit:7861 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6794 */
+  /* ./parser//parser.nit:7862 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6795 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6796 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6798 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  /* ./parser//parser.nit:7864 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7864);
   }
-  /* ./parser//parser.nit:6800 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* ./parser//parser.nit:7866 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7866);
   }
-  /* ./parser//parser.nit:6802 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7868 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7868);
   }
-  /* ./parser//parser.nit:6804 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7869 */
+  fra.me.REG[3] = NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7874 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* ./parser//parser.nit:7875 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6804);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7875);
   }
-  /* ./parser//parser.nit:6806 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction223___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 = 7880;
+  fra.me.meth = LOCATE_parser___ReduceAction223___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:7882 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:7883 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7885 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7885);
   }
-  /* ./parser//parser.nit:6807 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6814 */
+  /* ./parser//parser.nit:7886 */
+  fra.me.REG[3] = NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
+  /* ./parser//parser.nit:7889 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6815 */
+  /* ./parser//parser.nit:7890 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6815);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7890);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19651,74 +22366,69 @@ void parser___ReduceAction190___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction191___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction224___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 = 6820;
-  fra.me.meth = LOCATE_parser___ReduceAction191___action;
+  fra.me.line = 7895;
+  fra.me.meth = LOCATE_parser___ReduceAction224___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;
-  /* ./parser//parser.nit:6822 */
+  /* ./parser//parser.nit:7897 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6823 */
+  /* ./parser//parser.nit:7898 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6824 */
+  /* ./parser//parser.nit:7899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6825 */
+  /* ./parser//parser.nit:7900 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7901 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6826 */
+  /* ./parser//parser.nit:7902 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6827 */
+  /* ./parser//parser.nit:7903 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6828 */
+  /* ./parser//parser.nit:7904 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7905 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6829 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6831 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6831);
-  }
-  /* ./parser//parser.nit:6833 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7907 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7907);
   }
-  /* ./parser//parser.nit:6835 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7909 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7909);
   }
-  /* ./parser//parser.nit:6837 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:7911 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7911);
   }
-  /* ./parser//parser.nit:6838 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6845 */
+  /* ./parser//parser.nit:7912 */
+  fra.me.REG[3] = NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7917 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6846 */
+  /* ./parser//parser.nit:7918 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6846);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7918);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19726,83 +22436,61 @@ void parser___ReduceAction191___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction192___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction225___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 = 6851;
-  fra.me.meth = LOCATE_parser___ReduceAction192___action;
+  fra.me.line = 7923;
+  fra.me.meth = LOCATE_parser___ReduceAction225___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;
-  /* ./parser//parser.nit:6853 */
+  /* ./parser//parser.nit:7925 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6854 */
+  /* ./parser//parser.nit:7926 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6855 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6856 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6857 */
+  /* ./parser//parser.nit:7927 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6858 */
+  /* ./parser//parser.nit:7928 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6859 */
+  /* ./parser//parser.nit:7929 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6860 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6861 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6863 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6863);
-  }
-  /* ./parser//parser.nit:6865 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6865);
-  }
-  /* ./parser//parser.nit:6867 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* ./parser//parser.nit:7931 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6867);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7931);
   }
-  /* ./parser//parser.nit:6869 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* ./parser//parser.nit:7933 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6869);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7933);
   }
-  /* ./parser//parser.nit:6871 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:7935 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6871);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7935);
   }
-  /* ./parser//parser.nit:6872 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6879 */
+  /* ./parser//parser.nit:7936 */
+  fra.me.REG[3] = NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7941 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6880 */
+  /* ./parser//parser.nit:7942 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6880);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7942);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19810,41 +22498,72 @@ void parser___ReduceAction192___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction193___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction226___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 = 6885;
-  fra.me.meth = LOCATE_parser___ReduceAction193___action;
+  fra.me.line = 7947;
+  fra.me.meth = LOCATE_parser___ReduceAction226___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;
-  /* ./parser//parser.nit:6887 */
+  /* ./parser//parser.nit:7949 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6888 */
+  /* ./parser//parser.nit:7950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6890 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* ./parser//parser.nit:7951 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7952 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7953 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7954 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7955 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:7957 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7957);
   }
-  /* ./parser//parser.nit:6891 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6895 */
+  /* ./parser//parser.nit:7959 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7959);
+  }
+  /* ./parser//parser.nit:7961 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7961);
+  }
+  /* ./parser//parser.nit:7963 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7963);
+  }
+  /* ./parser//parser.nit:7964 */
+  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* ./parser//parser.nit:7970 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6896 */
+  /* ./parser//parser.nit:7971 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6896);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7971);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19852,14 +22571,14 @@ void parser___ReduceAction193___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction194___action(val_t p0, val_t p1){
+void parser___ReduceAction227___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6901;
-  fra.me.meth = LOCATE_parser___ReduceAction194___action;
+  fra.me.line = 7976;
+  fra.me.meth = LOCATE_parser___ReduceAction227___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -19869,27 +22588,27 @@ void parser___ReduceAction194___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6903 */
+  /* ./parser//parser.nit:7978 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6904 */
+  /* ./parser//parser.nit:7979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6905 */
+  /* ./parser//parser.nit:7980 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6907 */
+  /* ./parser//parser.nit:7982 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6907);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7982);
   }
-  /* ./parser//parser.nit:6908 */
+  /* ./parser//parser.nit:7983 */
   fra.me.REG[4] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:6913 */
+  /* ./parser//parser.nit:7988 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6914 */
+  /* ./parser//parser.nit:7989 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6914);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7989);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19897,14 +22616,14 @@ void parser___ReduceAction194___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction195___action(val_t p0, val_t p1){
+void parser___ReduceAction228___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6919;
-  fra.me.meth = LOCATE_parser___ReduceAction195___action;
+  fra.me.line = 7994;
+  fra.me.meth = LOCATE_parser___ReduceAction228___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -19915,35 +22634,35 @@ void parser___ReduceAction195___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6921 */
+  /* ./parser//parser.nit:7996 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6922 */
+  /* ./parser//parser.nit:7997 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6923 */
+  /* ./parser//parser.nit:7998 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6924 */
+  /* ./parser//parser.nit:7999 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6926 */
+  /* ./parser//parser.nit:8001 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6926);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8001);
   }
-  /* ./parser//parser.nit:6928 */
+  /* ./parser//parser.nit:8003 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6928);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8003);
   }
-  /* ./parser//parser.nit:6929 */
+  /* ./parser//parser.nit:8004 */
   fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:6934 */
+  /* ./parser//parser.nit:8009 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6935 */
+  /* ./parser//parser.nit:8010 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6935);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8010);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19951,14 +22670,14 @@ void parser___ReduceAction195___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction196___action(val_t p0, val_t p1){
+void parser___ReduceAction229___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6940;
-  fra.me.meth = LOCATE_parser___ReduceAction196___action;
+  fra.me.line = 8015;
+  fra.me.meth = LOCATE_parser___ReduceAction229___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -19969,46 +22688,46 @@ void parser___ReduceAction196___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6942 */
+  /* ./parser//parser.nit:8017 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6943 */
+  /* ./parser//parser.nit:8018 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6944 */
+  /* ./parser//parser.nit:8019 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6945 */
+  /* ./parser//parser.nit:8020 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6946 */
+  /* ./parser//parser.nit:8021 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6947 */
+  /* ./parser//parser.nit:8022 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6948 */
+  /* ./parser//parser.nit:8023 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6949 */
+  /* ./parser//parser.nit:8024 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6951 */
+  /* ./parser//parser.nit:8026 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6951);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8026);
   }
-  /* ./parser//parser.nit:6953 */
+  /* ./parser//parser.nit:8028 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6953);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8028);
   }
-  /* ./parser//parser.nit:6954 */
+  /* ./parser//parser.nit:8029 */
   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:6955 */
+  /* ./parser//parser.nit:8030 */
   fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:6960 */
+  /* ./parser//parser.nit:8035 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6961 */
+  /* ./parser//parser.nit:8036 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6961);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8036);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20016,14 +22735,14 @@ void parser___ReduceAction196___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction197___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[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 = 6966;
-  fra.me.meth = LOCATE_parser___ReduceAction197___action;
+  fra.me.line = 8041;
+  fra.me.meth = LOCATE_parser___ReduceAction230___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -20035,54 +22754,54 @@ void parser___ReduceAction197___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6968 */
+  /* ./parser//parser.nit:8043 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6969 */
+  /* ./parser//parser.nit:8044 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6970 */
+  /* ./parser//parser.nit:8045 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6971 */
+  /* ./parser//parser.nit:8046 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6972 */
+  /* ./parser//parser.nit:8047 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6973 */
+  /* ./parser//parser.nit:8048 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6974 */
+  /* ./parser//parser.nit:8049 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6975 */
+  /* ./parser//parser.nit:8050 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6976 */
+  /* ./parser//parser.nit:8051 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:6978 */
+  /* ./parser//parser.nit:8053 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8053);
   }
-  /* ./parser//parser.nit:6980 */
+  /* ./parser//parser.nit:8055 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8055);
   }
-  /* ./parser//parser.nit:6982 */
+  /* ./parser//parser.nit:8057 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6982);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8057);
   }
-  /* ./parser//parser.nit:6983 */
+  /* ./parser//parser.nit:8058 */
   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:6984 */
+  /* ./parser//parser.nit:8059 */
   fra.me.REG[6] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:6989 */
+  /* ./parser//parser.nit:8064 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6990 */
+  /* ./parser//parser.nit:8065 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6990);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8065);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20090,15 +22809,15 @@ void parser___ReduceAction197___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction198___action(val_t p0, val_t p1){
+void parser___ReduceAction231___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 6995;
-  fra.me.meth = LOCATE_parser___ReduceAction198___action;
+  fra.me.line = 8070;
+  fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20108,13 +22827,13 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6997 */
+  /* ./parser//parser.nit:8072 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6998 */
+  /* ./parser//parser.nit:8073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6999 */
+  /* ./parser//parser.nit:8074 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7001 */
+  /* ./parser//parser.nit:8076 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20129,16 +22848,16 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7002 */
+    /* ./parser//parser.nit:8077 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7004 */
+  /* ./parser//parser.nit:8079 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7005 */
+  /* ./parser//parser.nit:8080 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7005);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8080);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20146,15 +22865,15 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction199___action(val_t p0, val_t p1){
+void parser___ReduceAction232___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7010;
-  fra.me.meth = LOCATE_parser___ReduceAction199___action;
+  fra.me.line = 8085;
+  fra.me.meth = LOCATE_parser___ReduceAction232___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -20165,21 +22884,21 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7012 */
+  /* ./parser//parser.nit:8087 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7013 */
+  /* ./parser//parser.nit:8088 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7014 */
+  /* ./parser//parser.nit:8089 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7015 */
+  /* ./parser//parser.nit:8090 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7018 */
+  /* ./parser//parser.nit:8093 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8093);
   }
-  /* ./parser//parser.nit:7019 */
+  /* ./parser//parser.nit:8094 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20194,19 +22913,19 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7020 */
+    /* ./parser//parser.nit:8095 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7022 */
+  /* ./parser//parser.nit:8097 */
   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:7023 */
+  /* ./parser//parser.nit:8098 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7024 */
+  /* ./parser//parser.nit:8099 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7024);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8099);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20214,14 +22933,14 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction200___action(val_t p0, val_t p1){
+void parser___ReduceAction233___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7029;
-  fra.me.meth = LOCATE_parser___ReduceAction200___action;
+  fra.me.line = 8104;
+  fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20231,21 +22950,21 @@ void parser___ReduceAction200___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7031 */
+  /* ./parser//parser.nit:8106 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7032 */
+  /* ./parser//parser.nit:8107 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7033 */
+  /* ./parser//parser.nit:8108 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7034 */
+  /* ./parser//parser.nit:8109 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7036 */
+  /* ./parser//parser.nit:8111 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7037 */
+  /* ./parser//parser.nit:8112 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8112);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20253,14 +22972,14 @@ void parser___ReduceAction200___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction202___action(val_t p0, val_t p1){
+void parser___ReduceAction235___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7042;
-  fra.me.meth = LOCATE_parser___ReduceAction202___action;
+  fra.me.line = 8117;
+  fra.me.meth = LOCATE_parser___ReduceAction235___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20270,21 +22989,21 @@ void parser___ReduceAction202___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7044 */
+  /* ./parser//parser.nit:8119 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7045 */
+  /* ./parser//parser.nit:8120 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7046 */
+  /* ./parser//parser.nit:8121 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7047 */
+  /* ./parser//parser.nit:8122 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7049 */
+  /* ./parser//parser.nit:8124 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7050 */
+  /* ./parser//parser.nit:8125 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7050);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8125);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20292,14 +23011,14 @@ void parser___ReduceAction202___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction203___action(val_t p0, val_t p1){
+void parser___ReduceAction236___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7055;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
+  fra.me.line = 8130;
+  fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20308,23 +23027,23 @@ void parser___ReduceAction203___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7057 */
+  /* ./parser//parser.nit:8132 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7058 */
+  /* ./parser//parser.nit:8133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7059 */
+  /* ./parser//parser.nit:8134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7060 */
+  /* ./parser//parser.nit:8135 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7061 */
+  /* ./parser//parser.nit:8136 */
   fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7064 */
+  /* ./parser//parser.nit:8139 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7065 */
+  /* ./parser//parser.nit:8140 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7065);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8140);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20332,14 +23051,14 @@ void parser___ReduceAction203___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction204___action(val_t p0, val_t p1){
+void parser___ReduceAction237___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7070;
-  fra.me.meth = LOCATE_parser___ReduceAction204___action;
+  fra.me.line = 8145;
+  fra.me.meth = LOCATE_parser___ReduceAction237___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20348,21 +23067,21 @@ void parser___ReduceAction204___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7072 */
+  /* ./parser//parser.nit:8147 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7073 */
+  /* ./parser//parser.nit:8148 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7074 */
+  /* ./parser//parser.nit:8149 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7075 */
+  /* ./parser//parser.nit:8150 */
   fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7078 */
+  /* ./parser//parser.nit:8153 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7079 */
+  /* ./parser//parser.nit:8154 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7079);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8154);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20370,14 +23089,14 @@ void parser___ReduceAction204___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction205___action(val_t p0, val_t p1){
+void parser___ReduceAction238___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7084;
-  fra.me.meth = LOCATE_parser___ReduceAction205___action;
+  fra.me.line = 8159;
+  fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20386,17 +23105,17 @@ void parser___ReduceAction205___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7086 */
+  /* ./parser//parser.nit:8161 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7087 */
+  /* ./parser//parser.nit:8162 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7089 */
+  /* ./parser//parser.nit:8164 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7090 */
+  /* ./parser//parser.nit:8165 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7090);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8165);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20404,15 +23123,15 @@ void parser___ReduceAction205___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction206___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 = 7095;
-  fra.me.meth = LOCATE_parser___ReduceAction206___action;
+  fra.me.line = 8170;
+  fra.me.meth = LOCATE_parser___ReduceAction239___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20422,19 +23141,19 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7097 */
+  /* ./parser//parser.nit:8172 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7098 */
+  /* ./parser//parser.nit:8173 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7099 */
+  /* ./parser//parser.nit:8174 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7101 */
+  /* ./parser//parser.nit:8176 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8176);
   }
-  /* ./parser//parser.nit:7102 */
+  /* ./parser//parser.nit:8177 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20449,18 +23168,18 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7103 */
+    /* ./parser//parser.nit:8178 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7105 */
+  /* ./parser//parser.nit:8180 */
   fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7108 */
+  /* ./parser//parser.nit:8183 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7109 */
+  /* ./parser//parser.nit:8184 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7109);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8184);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20468,15 +23187,15 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction207___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 = 7114;
-  fra.me.meth = LOCATE_parser___ReduceAction207___action;
+  fra.me.line = 8189;
+  fra.me.meth = LOCATE_parser___ReduceAction240___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -20487,27 +23206,27 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7116 */
+  /* ./parser//parser.nit:8191 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7117 */
+  /* ./parser//parser.nit:8192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7118 */
+  /* ./parser//parser.nit:8193 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7119 */
+  /* ./parser//parser.nit:8194 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7121 */
+  /* ./parser//parser.nit:8196 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8196);
   }
-  /* ./parser//parser.nit:7123 */
+  /* ./parser//parser.nit:8198 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8198);
   }
-  /* ./parser//parser.nit:7124 */
+  /* ./parser//parser.nit:8199 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20522,21 +23241,21 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7125 */
+    /* ./parser//parser.nit:8200 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7127 */
+  /* ./parser//parser.nit:8202 */
   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:7128 */
+  /* ./parser//parser.nit:8203 */
   fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7131 */
+  /* ./parser//parser.nit:8206 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7132 */
+  /* ./parser//parser.nit:8207 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7132);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8207);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20544,15 +23263,15 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction208___action(val_t p0, val_t p1){
+void parser___ReduceAction241___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7137;
-  fra.me.meth = LOCATE_parser___ReduceAction208___action;
+  fra.me.line = 8212;
+  fra.me.meth = LOCATE_parser___ReduceAction241___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20562,21 +23281,21 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7139 */
+  /* ./parser//parser.nit:8214 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7140 */
+  /* ./parser//parser.nit:8215 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7141 */
+  /* ./parser//parser.nit:8216 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7142 */
+  /* ./parser//parser.nit:8217 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7144 */
+  /* ./parser//parser.nit:8219 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8219);
   }
-  /* ./parser//parser.nit:7145 */
+  /* ./parser//parser.nit:8220 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20591,18 +23310,18 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7146 */
+    /* ./parser//parser.nit:8221 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7148 */
+  /* ./parser//parser.nit:8223 */
   fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7151 */
+  /* ./parser//parser.nit:8226 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7152 */
+  /* ./parser//parser.nit:8227 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8227);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20610,15 +23329,15 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction209___action(val_t p0, val_t p1){
+void parser___ReduceAction242___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 = 7157;
-  fra.me.meth = LOCATE_parser___ReduceAction209___action;
+  fra.me.line = 8232;
+  fra.me.meth = LOCATE_parser___ReduceAction242___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -20629,29 +23348,29 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7159 */
+  /* ./parser//parser.nit:8234 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7160 */
+  /* ./parser//parser.nit:8235 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7161 */
+  /* ./parser//parser.nit:8236 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7162 */
+  /* ./parser//parser.nit:8237 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7163 */
+  /* ./parser//parser.nit:8238 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7165 */
+  /* ./parser//parser.nit:8240 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8240);
   }
-  /* ./parser//parser.nit:7167 */
+  /* ./parser//parser.nit:8242 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8242);
   }
-  /* ./parser//parser.nit:7168 */
+  /* ./parser//parser.nit:8243 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20666,21 +23385,21 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7169 */
+    /* ./parser//parser.nit:8244 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7171 */
+  /* ./parser//parser.nit:8246 */
   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:7172 */
+  /* ./parser//parser.nit:8247 */
   fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7175 */
+  /* ./parser//parser.nit:8250 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7176 */
+  /* ./parser//parser.nit:8251 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7176);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8251);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20688,14 +23407,14 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction210___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[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 = 7181;
-  fra.me.meth = LOCATE_parser___ReduceAction210___action;
+  fra.me.line = 8256;
+  fra.me.meth = LOCATE_parser___ReduceAction243___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20705,19 +23424,19 @@ void parser___ReduceAction210___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7183 */
+  /* ./parser//parser.nit:8258 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7184 */
+  /* ./parser//parser.nit:8259 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7185 */
+  /* ./parser//parser.nit:8260 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7187 */
+  /* ./parser//parser.nit:8262 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7188 */
+  /* ./parser//parser.nit:8263 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7188);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8263);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20725,14 +23444,14 @@ void parser___ReduceAction210___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction213___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[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 = 7193;
-  fra.me.meth = LOCATE_parser___ReduceAction213___action;
+  fra.me.line = 8268;
+  fra.me.meth = LOCATE_parser___ReduceAction246___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20741,25 +23460,25 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7195 */
+  /* ./parser//parser.nit:8270 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7196 */
+  /* ./parser//parser.nit:8271 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7198 */
+  /* ./parser//parser.nit:8273 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8273);
   }
-  /* ./parser//parser.nit:7199 */
+  /* ./parser//parser.nit:8274 */
   fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7203 */
+  /* ./parser//parser.nit:8278 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7204 */
+  /* ./parser//parser.nit:8279 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7204);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8279);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20767,14 +23486,14 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction214___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[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 = 7209;
-  fra.me.meth = LOCATE_parser___ReduceAction214___action;
+  fra.me.line = 8284;
+  fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20784,33 +23503,33 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7211 */
+  /* ./parser//parser.nit:8286 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7212 */
+  /* ./parser//parser.nit:8287 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7213 */
+  /* ./parser//parser.nit:8288 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7215 */
+  /* ./parser//parser.nit:8290 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8290);
   }
-  /* ./parser//parser.nit:7217 */
+  /* ./parser//parser.nit:8292 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8292);
   }
-  /* ./parser//parser.nit:7218 */
+  /* ./parser//parser.nit:8293 */
   fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7222 */
+  /* ./parser//parser.nit:8297 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7223 */
+  /* ./parser//parser.nit:8298 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7223);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8298);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20818,14 +23537,14 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction215___action(val_t p0, val_t p1){
+void parser___ReduceAction248___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 = 7228;
-  fra.me.meth = LOCATE_parser___ReduceAction215___action;
+  fra.me.line = 8303;
+  fra.me.meth = LOCATE_parser___ReduceAction248___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20834,25 +23553,25 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7230 */
+  /* ./parser//parser.nit:8305 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7231 */
+  /* ./parser//parser.nit:8306 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7233 */
+  /* ./parser//parser.nit:8308 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8308);
   }
-  /* ./parser//parser.nit:7234 */
+  /* ./parser//parser.nit:8309 */
   fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:7239 */
+  /* ./parser//parser.nit:8314 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7240 */
+  /* ./parser//parser.nit:8315 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7240);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8315);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20860,14 +23579,14 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction216___action(val_t p0, val_t p1){
+void parser___ReduceAction249___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 = 7245;
-  fra.me.meth = LOCATE_parser___ReduceAction216___action;
+  fra.me.line = 8320;
+  fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20877,33 +23596,33 @@ void parser___ReduceAction216___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7247 */
+  /* ./parser//parser.nit:8322 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7248 */
+  /* ./parser//parser.nit:8323 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7249 */
+  /* ./parser//parser.nit:8324 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7251 */
+  /* ./parser//parser.nit:8326 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8326);
   }
-  /* ./parser//parser.nit:7253 */
+  /* ./parser//parser.nit:8328 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8328);
   }
-  /* ./parser//parser.nit:7254 */
+  /* ./parser//parser.nit:8329 */
   fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7259 */
+  /* ./parser//parser.nit:8334 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7260 */
+  /* ./parser//parser.nit:8335 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7260);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8335);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20911,14 +23630,14 @@ void parser___ReduceAction216___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction217___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[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 = 7265;
-  fra.me.meth = LOCATE_parser___ReduceAction217___action;
+  fra.me.line = 8340;
+  fra.me.meth = LOCATE_parser___ReduceAction250___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -20928,33 +23647,33 @@ void parser___ReduceAction217___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7267 */
+  /* ./parser//parser.nit:8342 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7268 */
+  /* ./parser//parser.nit:8343 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7269 */
+  /* ./parser//parser.nit:8344 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7271 */
+  /* ./parser//parser.nit:8346 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8346);
   }
-  /* ./parser//parser.nit:7273 */
+  /* ./parser//parser.nit:8348 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8348);
   }
-  /* ./parser//parser.nit:7274 */
+  /* ./parser//parser.nit:8349 */
   fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:7279 */
+  /* ./parser//parser.nit:8354 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7280 */
+  /* ./parser//parser.nit:8355 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7280);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8355);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20962,14 +23681,14 @@ void parser___ReduceAction217___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction218___action(val_t p0, val_t p1){
+void parser___ReduceAction251___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 = 7285;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
+  fra.me.line = 8360;
+  fra.me.meth = LOCATE_parser___ReduceAction251___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -20980,41 +23699,41 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7287 */
+  /* ./parser//parser.nit:8362 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7288 */
+  /* ./parser//parser.nit:8363 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7289 */
+  /* ./parser//parser.nit:8364 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7290 */
+  /* ./parser//parser.nit:8365 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7292 */
+  /* ./parser//parser.nit:8367 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7292);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8367);
   }
-  /* ./parser//parser.nit:7294 */
+  /* ./parser//parser.nit:8369 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7294);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8369);
   }
-  /* ./parser//parser.nit:7296 */
+  /* ./parser//parser.nit:8371 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7296);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8371);
   }
-  /* ./parser//parser.nit:7297 */
+  /* ./parser//parser.nit:8372 */
   fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7302 */
+  /* ./parser//parser.nit:8377 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7303 */
+  /* ./parser//parser.nit:8378 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7303);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8378);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21022,14 +23741,14 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction219___action(val_t p0, val_t p1){
+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 = 7308;
-  fra.me.meth = LOCATE_parser___ReduceAction219___action;
+  fra.me.line = 8383;
+  fra.me.meth = LOCATE_parser___ReduceAction252___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -21038,25 +23757,25 @@ void parser___ReduceAction219___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7310 */
+  /* ./parser//parser.nit:8385 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7311 */
+  /* ./parser//parser.nit:8386 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7313 */
+  /* ./parser//parser.nit:8388 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast nullable TKwabort*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7313);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8388);
   }
-  /* ./parser//parser.nit:7314 */
+  /* ./parser//parser.nit:8389 */
   fra.me.REG[3] = NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7317 */
+  /* ./parser//parser.nit:8392 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7318 */
+  /* ./parser//parser.nit:8393 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7318);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8393);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21064,14 +23783,14 @@ void parser___ReduceAction219___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction220___action(val_t p0, val_t p1){
+void parser___ReduceAction253___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7323;
-  fra.me.meth = LOCATE_parser___ReduceAction220___action;
+  fra.me.line = 8398;
+  fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -21080,25 +23799,25 @@ void parser___ReduceAction220___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7325 */
+  /* ./parser//parser.nit:8400 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7326 */
+  /* ./parser//parser.nit:8401 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7328 */
+  /* ./parser//parser.nit:8403 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8403);
   }
-  /* ./parser//parser.nit:7329 */
+  /* ./parser//parser.nit:8404 */
   fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:7334 */
+  /* ./parser//parser.nit:8409 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7335 */
+  /* ./parser//parser.nit:8410 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7335);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8410);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21106,14 +23825,14 @@ void parser___ReduceAction220___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction221___action(val_t p0, val_t p1){
+void parser___ReduceAction254___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7340;
-  fra.me.meth = LOCATE_parser___ReduceAction221___action;
+  fra.me.line = 8415;
+  fra.me.meth = LOCATE_parser___ReduceAction254___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -21123,33 +23842,33 @@ void parser___ReduceAction221___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7342 */
+  /* ./parser//parser.nit:8417 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7343 */
+  /* ./parser//parser.nit:8418 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7344 */
+  /* ./parser//parser.nit:8419 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7346 */
+  /* ./parser//parser.nit:8421 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8421);
   }
-  /* ./parser//parser.nit:7348 */
+  /* ./parser//parser.nit:8423 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8423);
   }
-  /* ./parser//parser.nit:7349 */
+  /* ./parser//parser.nit:8424 */
   fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7354 */
+  /* ./parser//parser.nit:8429 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7355 */
+  /* ./parser//parser.nit:8430 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7355);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8430);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21157,14 +23876,14 @@ void parser___ReduceAction221___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction222___action(val_t p0, val_t p1){
+void parser___ReduceAction255___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7360;
-  fra.me.meth = LOCATE_parser___ReduceAction222___action;
+  fra.me.line = 8435;
+  fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -21174,33 +23893,33 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7362 */
+  /* ./parser//parser.nit:8437 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7363 */
+  /* ./parser//parser.nit:8438 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7364 */
+  /* ./parser//parser.nit:8439 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7366 */
+  /* ./parser//parser.nit:8441 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8441);
   }
-  /* ./parser//parser.nit:7368 */
+  /* ./parser//parser.nit:8443 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8443);
   }
-  /* ./parser//parser.nit:7369 */
+  /* ./parser//parser.nit:8444 */
   fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:7374 */
+  /* ./parser//parser.nit:8449 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7375 */
+  /* ./parser//parser.nit:8450 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7375);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8450);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21208,14 +23927,14 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction223___action(val_t p0, val_t p1){
+void parser___ReduceAction256___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7380;
-  fra.me.meth = LOCATE_parser___ReduceAction223___action;
+  fra.me.line = 8455;
+  fra.me.meth = LOCATE_parser___ReduceAction256___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -21226,41 +23945,41 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7382 */
+  /* ./parser//parser.nit:8457 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7383 */
+  /* ./parser//parser.nit:8458 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7384 */
+  /* ./parser//parser.nit:8459 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7385 */
+  /* ./parser//parser.nit:8460 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7387 */
+  /* ./parser//parser.nit:8462 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7387);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8462);
   }
-  /* ./parser//parser.nit:7389 */
+  /* ./parser//parser.nit:8464 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8464);
   }
-  /* ./parser//parser.nit:7391 */
+  /* ./parser//parser.nit:8466 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7391);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8466);
   }
-  /* ./parser//parser.nit:7392 */
+  /* ./parser//parser.nit:8467 */
   fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7397 */
+  /* ./parser//parser.nit:8472 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7398 */
+  /* ./parser//parser.nit:8473 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7398);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8473);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21268,14 +23987,14 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction230___action(val_t p0, val_t p1){
+void parser___ReduceAction263___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7403;
-  fra.me.meth = LOCATE_parser___ReduceAction230___action;
+  fra.me.line = 8478;
+  fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -21288,52 +24007,52 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7405 */
+  /* ./parser//parser.nit:8480 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7406 */
+  /* ./parser//parser.nit:8481 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7407 */
+  /* ./parser//parser.nit:8482 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7408 */
+  /* ./parser//parser.nit:8483 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7409 */
+  /* ./parser//parser.nit:8484 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7410 */
+  /* ./parser//parser.nit:8485 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7411 */
+  /* ./parser//parser.nit:8486 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7412 */
+  /* ./parser//parser.nit:8487 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7414 */
+  /* ./parser//parser.nit:8489 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7414);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8489);
   }
-  /* ./parser//parser.nit:7416 */
+  /* ./parser//parser.nit:8491 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8491);
   }
-  /* ./parser//parser.nit:7418 */
+  /* ./parser//parser.nit:8493 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8493);
   }
-  /* ./parser//parser.nit:7419 */
+  /* ./parser//parser.nit:8494 */
   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:7420 */
+  /* ./parser//parser.nit:8495 */
   fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:7426 */
+  /* ./parser//parser.nit:8501 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:7427 */
+  /* ./parser//parser.nit:8502 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8502);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21341,14 +24060,14 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction231___action(val_t p0, val_t p1){
+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 = 7432;
-  fra.me.meth = LOCATE_parser___ReduceAction231___action;
+  fra.me.line = 8507;
+  fra.me.meth = LOCATE_parser___ReduceAction264___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -21361,42 +24080,42 @@ void parser___ReduceAction231___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7434 */
+  /* ./parser//parser.nit:8509 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7435 */
+  /* ./parser//parser.nit:8510 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7436 */
+  /* ./parser//parser.nit:8511 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7437 */
+  /* ./parser//parser.nit:8512 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7438 */
+  /* ./parser//parser.nit:8513 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7439 */
+  /* ./parser//parser.nit:8514 */
   fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:7442 */
+  /* ./parser//parser.nit:8517 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7442);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8517);
   }
-  /* ./parser//parser.nit:7444 */
+  /* ./parser//parser.nit:8519 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8519);
   }
-  /* ./parser//parser.nit:7445 */
+  /* ./parser//parser.nit:8520 */
   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:7446 */
+  /* ./parser//parser.nit:8521 */
   fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:7452 */
+  /* ./parser//parser.nit:8527 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7453 */
+  /* ./parser//parser.nit:8528 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7453);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8528);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21404,14 +24123,14 @@ void parser___ReduceAction231___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction232___action(val_t p0, val_t p1){
+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 = 7458;
-  fra.me.meth = LOCATE_parser___ReduceAction232___action;
+  fra.me.line = 8533;
+  fra.me.meth = LOCATE_parser___ReduceAction265___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -21425,63 +24144,63 @@ void parser___ReduceAction232___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7460 */
+  /* ./parser//parser.nit:8535 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7461 */
+  /* ./parser//parser.nit:8536 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7462 */
+  /* ./parser//parser.nit:8537 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7463 */
+  /* ./parser//parser.nit:8538 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7464 */
+  /* ./parser//parser.nit:8539 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7465 */
+  /* ./parser//parser.nit:8540 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7466 */
+  /* ./parser//parser.nit:8541 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7467 */
+  /* ./parser//parser.nit:8542 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7468 */
+  /* ./parser//parser.nit:8543 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7470 */
+  /* ./parser//parser.nit:8545 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7470);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8545);
   }
-  /* ./parser//parser.nit:7472 */
+  /* ./parser//parser.nit:8547 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7472);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8547);
   }
-  /* ./parser//parser.nit:7474 */
+  /* ./parser//parser.nit:8549 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8549);
   }
-  /* ./parser//parser.nit:7475 */
+  /* ./parser//parser.nit:8550 */
   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:7477 */
+  /* ./parser//parser.nit:8552 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8552);
   }
-  /* ./parser//parser.nit:7478 */
+  /* ./parser//parser.nit:8553 */
   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:7479 */
+  /* ./parser//parser.nit:8554 */
   fra.me.REG[8] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:7485 */
+  /* ./parser//parser.nit:8560 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:7486 */
+  /* ./parser//parser.nit:8561 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7486);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8561);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21489,14 +24208,14 @@ void parser___ReduceAction232___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction233___action(val_t p0, val_t p1){
+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 = 7491;
-  fra.me.meth = LOCATE_parser___ReduceAction233___action;
+  fra.me.line = 8566;
+  fra.me.meth = LOCATE_parser___ReduceAction266___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -21510,53 +24229,53 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7493 */
+  /* ./parser//parser.nit:8568 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7494 */
+  /* ./parser//parser.nit:8569 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7495 */
+  /* ./parser//parser.nit:8570 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7496 */
+  /* ./parser//parser.nit:8571 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7497 */
+  /* ./parser//parser.nit:8572 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7498 */
+  /* ./parser//parser.nit:8573 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7499 */
+  /* ./parser//parser.nit:8574 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:7502 */
+  /* ./parser//parser.nit:8577 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7502);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8577);
   }
-  /* ./parser//parser.nit:7504 */
+  /* ./parser//parser.nit:8579 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8579);
   }
-  /* ./parser//parser.nit:7505 */
+  /* ./parser//parser.nit:8580 */
   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:7507 */
+  /* ./parser//parser.nit:8582 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7507);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8582);
   }
-  /* ./parser//parser.nit:7508 */
+  /* ./parser//parser.nit:8583 */
   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:7509 */
+  /* ./parser//parser.nit:8584 */
   fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[8], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:7515 */
+  /* ./parser//parser.nit:8590 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:7516 */
+  /* ./parser//parser.nit:8591 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7516);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8591);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21564,14 +24283,14 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction234___action(val_t p0, val_t p1){
+void parser___ReduceAction267___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 = 7521;
-  fra.me.meth = LOCATE_parser___ReduceAction234___action;
+  fra.me.line = 8596;
+  fra.me.meth = LOCATE_parser___ReduceAction267___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -21582,38 +24301,38 @@ void parser___ReduceAction234___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7523 */
+  /* ./parser//parser.nit:8598 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7524 */
+  /* ./parser//parser.nit:8599 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7525 */
+  /* ./parser//parser.nit:8600 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7526 */
+  /* ./parser//parser.nit:8601 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7528 */
+  /* ./parser//parser.nit:8603 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8603);
   }
-  /* ./parser//parser.nit:7530 */
+  /* ./parser//parser.nit:8605 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8605);
   }
-  /* ./parser//parser.nit:7531 */
+  /* ./parser//parser.nit:8606 */
   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:7532 */
+  /* ./parser//parser.nit:8607 */
   fra.me.REG[5] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7537 */
+  /* ./parser//parser.nit:8612 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7538 */
+  /* ./parser//parser.nit:8613 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7538);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8613);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21621,14 +24340,14 @@ void parser___ReduceAction234___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction235___action(val_t p0, val_t p1){
+void parser___ReduceAction268___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 = 7543;
-  fra.me.meth = LOCATE_parser___ReduceAction235___action;
+  fra.me.line = 8618;
+  fra.me.meth = LOCATE_parser___ReduceAction268___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -21640,46 +24359,46 @@ void parser___ReduceAction235___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7545 */
+  /* ./parser//parser.nit:8620 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7546 */
+  /* ./parser//parser.nit:8621 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7547 */
+  /* ./parser//parser.nit:8622 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7548 */
+  /* ./parser//parser.nit:8623 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7549 */
+  /* ./parser//parser.nit:8624 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7551 */
+  /* ./parser//parser.nit:8626 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast nullable AQualified*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7551);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8626);
   }
-  /* ./parser//parser.nit:7553 */
+  /* ./parser//parser.nit:8628 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7553);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8628);
   }
-  /* ./parser//parser.nit:7555 */
+  /* ./parser//parser.nit:8630 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8630);
   }
-  /* ./parser//parser.nit:7556 */
+  /* ./parser//parser.nit:8631 */
   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:7557 */
+  /* ./parser//parser.nit:8632 */
   fra.me.REG[6] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:7562 */
+  /* ./parser//parser.nit:8637 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7563 */
+  /* ./parser//parser.nit:8638 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7563);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8638);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21687,14 +24406,14 @@ void parser___ReduceAction235___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction236___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[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 = 7568;
-  fra.me.meth = LOCATE_parser___ReduceAction236___action;
+  fra.me.line = 8643;
+  fra.me.meth = LOCATE_parser___ReduceAction269___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -21706,50 +24425,50 @@ void parser___ReduceAction236___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7570 */
+  /* ./parser//parser.nit:8645 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7571 */
+  /* ./parser//parser.nit:8646 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7572 */
+  /* ./parser//parser.nit:8647 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7573 */
+  /* ./parser//parser.nit:8648 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7574 */
+  /* ./parser//parser.nit:8649 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7575 */
+  /* ./parser//parser.nit:8650 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7576 */
+  /* ./parser//parser.nit:8651 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7578 */
+  /* ./parser//parser.nit:8653 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7578);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8653);
   }
-  /* ./parser//parser.nit:7580 */
+  /* ./parser//parser.nit:8655 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8655);
   }
-  /* ./parser//parser.nit:7582 */
+  /* ./parser//parser.nit:8657 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8657);
   }
-  /* ./parser//parser.nit:7583 */
+  /* ./parser//parser.nit:8658 */
   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:7584 */
+  /* ./parser//parser.nit:8659 */
   fra.me.REG[6] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:7589 */
+  /* ./parser//parser.nit:8664 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7590 */
+  /* ./parser//parser.nit:8665 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7590);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8665);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21757,14 +24476,14 @@ void parser___ReduceAction236___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction237___action(val_t p0, val_t p1){
+void parser___ReduceAction270___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7595;
-  fra.me.meth = LOCATE_parser___ReduceAction237___action;
+  fra.me.line = 8670;
+  fra.me.meth = LOCATE_parser___ReduceAction270___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -21776,40 +24495,40 @@ void parser___ReduceAction237___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7597 */
+  /* ./parser//parser.nit:8672 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7598 */
+  /* ./parser//parser.nit:8673 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7599 */
+  /* ./parser//parser.nit:8674 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7600 */
+  /* ./parser//parser.nit:8675 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7601 */
+  /* ./parser//parser.nit:8676 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:7604 */
+  /* ./parser//parser.nit:8679 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7604);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8679);
   }
-  /* ./parser//parser.nit:7606 */
+  /* ./parser//parser.nit:8681 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7606);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8681);
   }
-  /* ./parser//parser.nit:7607 */
+  /* ./parser//parser.nit:8682 */
   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:7608 */
+  /* ./parser//parser.nit:8683 */
   fra.me.REG[5] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7613 */
+  /* ./parser//parser.nit:8688 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7614 */
+  /* ./parser//parser.nit:8689 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7614);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8689);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21817,14 +24536,14 @@ void parser___ReduceAction237___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction238___action(val_t p0, val_t p1){
+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 = 7619;
-  fra.me.meth = LOCATE_parser___ReduceAction238___action;
+  fra.me.line = 8694;
+  fra.me.meth = LOCATE_parser___ReduceAction271___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -21834,33 +24553,33 @@ void parser___ReduceAction238___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7621 */
+  /* ./parser//parser.nit:8696 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7622 */
+  /* ./parser//parser.nit:8697 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7623 */
+  /* ./parser//parser.nit:8698 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7625 */
+  /* ./parser//parser.nit:8700 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast nullable TKwlabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8700);
   }
-  /* ./parser//parser.nit:7627 */
+  /* ./parser//parser.nit:8702 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8702);
   }
-  /* ./parser//parser.nit:7628 */
+  /* ./parser//parser.nit:8703 */
   fra.me.REG[3] = NEW_ALabel_parser___parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7632 */
+  /* ./parser//parser.nit:8707 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7633 */
+  /* ./parser//parser.nit:8708 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7633);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8708);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21868,15 +24587,15 @@ void parser___ReduceAction238___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction239___action(val_t p0, val_t p1){
+void parser___ReduceAction272___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 = 7638;
-  fra.me.meth = LOCATE_parser___ReduceAction239___action;
+  fra.me.line = 8713;
+  fra.me.meth = LOCATE_parser___ReduceAction272___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -21886,13 +24605,13 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7640 */
+  /* ./parser//parser.nit:8715 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7641 */
+  /* ./parser//parser.nit:8716 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7642 */
+  /* ./parser//parser.nit:8717 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7644 */
+  /* ./parser//parser.nit:8719 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21907,16 +24626,16 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7645 */
+    /* ./parser//parser.nit:8720 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7647 */
+  /* ./parser//parser.nit:8722 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7648 */
+  /* ./parser//parser.nit:8723 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7648);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8723);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21924,15 +24643,15 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction240___action(val_t p0, val_t p1){
+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 REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7653;
-  fra.me.meth = LOCATE_parser___ReduceAction240___action;
+  fra.me.line = 8728;
+  fra.me.meth = LOCATE_parser___ReduceAction273___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -21943,21 +24662,21 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7655 */
+  /* ./parser//parser.nit:8730 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7656 */
+  /* ./parser//parser.nit:8731 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7657 */
+  /* ./parser//parser.nit:8732 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7658 */
+  /* ./parser//parser.nit:8733 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7661 */
+  /* ./parser//parser.nit:8736 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8736);
   }
-  /* ./parser//parser.nit:7662 */
+  /* ./parser//parser.nit:8737 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21972,19 +24691,19 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7663 */
+    /* ./parser//parser.nit:8738 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7665 */
+  /* ./parser//parser.nit:8740 */
   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:7666 */
+  /* ./parser//parser.nit:8741 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7667 */
+  /* ./parser//parser.nit:8742 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7667);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8742);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21992,14 +24711,14 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction241___action(val_t p0, val_t p1){
+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 = 7672;
-  fra.me.meth = LOCATE_parser___ReduceAction241___action;
+  fra.me.line = 8747;
+  fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -22013,59 +24732,59 @@ void parser___ReduceAction241___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7674 */
+  /* ./parser//parser.nit:8749 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7675 */
+  /* ./parser//parser.nit:8750 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7676 */
+  /* ./parser//parser.nit:8751 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7677 */
+  /* ./parser//parser.nit:8752 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7678 */
+  /* ./parser//parser.nit:8753 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7679 */
+  /* ./parser//parser.nit:8754 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7680 */
+  /* ./parser//parser.nit:8755 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7682 */
+  /* ./parser//parser.nit:8757 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7682);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8757);
   }
-  /* ./parser//parser.nit:7684 */
+  /* ./parser//parser.nit:8759 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8759);
   }
-  /* ./parser//parser.nit:7686 */
+  /* ./parser//parser.nit:8761 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8761);
   }
-  /* ./parser//parser.nit:7688 */
+  /* ./parser//parser.nit:8763 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8763);
   }
-  /* ./parser//parser.nit:7690 */
+  /* ./parser//parser.nit:8765 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7690);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8765);
   }
-  /* ./parser//parser.nit:7691 */
+  /* ./parser//parser.nit:8766 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7699 */
+  /* ./parser//parser.nit:8774 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7700 */
+  /* ./parser//parser.nit:8775 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7700);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8775);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22073,14 +24792,14 @@ void parser___ReduceAction241___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction242___action(val_t p0, val_t p1){
+void parser___ReduceAction275___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 = 7705;
-  fra.me.meth = LOCATE_parser___ReduceAction242___action;
+  fra.me.line = 8780;
+  fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -22095,74 +24814,74 @@ void parser___ReduceAction242___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7707 */
+  /* ./parser//parser.nit:8782 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7708 */
+  /* ./parser//parser.nit:8783 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7709 */
+  /* ./parser//parser.nit:8784 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7710 */
+  /* ./parser//parser.nit:8785 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7711 */
+  /* ./parser//parser.nit:8786 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7712 */
+  /* ./parser//parser.nit:8787 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7713 */
+  /* ./parser//parser.nit:8788 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7714 */
+  /* ./parser//parser.nit:8789 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7715 */
+  /* ./parser//parser.nit:8790 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7716 */
+  /* ./parser//parser.nit:8791 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7718 */
+  /* ./parser//parser.nit:8793 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7718);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8793);
   }
-  /* ./parser//parser.nit:7720 */
+  /* ./parser//parser.nit:8795 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7720);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8795);
   }
-  /* ./parser//parser.nit:7722 */
+  /* ./parser//parser.nit:8797 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7722);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8797);
   }
-  /* ./parser//parser.nit:7723 */
+  /* ./parser//parser.nit:8798 */
   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:7725 */
+  /* ./parser//parser.nit:8800 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7725);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8800);
   }
-  /* ./parser//parser.nit:7727 */
+  /* ./parser//parser.nit:8802 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8802);
   }
-  /* ./parser//parser.nit:7729 */
+  /* ./parser//parser.nit:8804 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8804);
   }
-  /* ./parser//parser.nit:7730 */
+  /* ./parser//parser.nit:8805 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7738 */
+  /* ./parser//parser.nit:8813 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7739 */
+  /* ./parser//parser.nit:8814 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7739);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8814);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22170,14 +24889,14 @@ void parser___ReduceAction242___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction243___action(val_t p0, val_t p1){
+void parser___ReduceAction276___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 = 7744;
-  fra.me.meth = LOCATE_parser___ReduceAction243___action;
+  fra.me.line = 8819;
+  fra.me.meth = LOCATE_parser___ReduceAction276___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -22192,70 +24911,70 @@ void parser___ReduceAction243___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7746 */
+  /* ./parser//parser.nit:8821 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7747 */
+  /* ./parser//parser.nit:8822 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7748 */
+  /* ./parser//parser.nit:8823 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7749 */
+  /* ./parser//parser.nit:8824 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7750 */
+  /* ./parser//parser.nit:8825 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7751 */
+  /* ./parser//parser.nit:8826 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7752 */
+  /* ./parser//parser.nit:8827 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7753 */
+  /* ./parser//parser.nit:8828 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7755 */
+  /* ./parser//parser.nit:8830 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8830);
   }
-  /* ./parser//parser.nit:7757 */
+  /* ./parser//parser.nit:8832 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7757);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8832);
   }
-  /* ./parser//parser.nit:7759 */
+  /* ./parser//parser.nit:8834 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7759);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8834);
   }
-  /* ./parser//parser.nit:7760 */
+  /* ./parser//parser.nit:8835 */
   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:7762 */
+  /* ./parser//parser.nit:8837 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7762);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8837);
   }
-  /* ./parser//parser.nit:7764 */
+  /* ./parser//parser.nit:8839 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8839);
   }
-  /* ./parser//parser.nit:7766 */
+  /* ./parser//parser.nit:8841 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8841);
   }
-  /* ./parser//parser.nit:7767 */
+  /* ./parser//parser.nit:8842 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7775 */
+  /* ./parser//parser.nit:8850 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7776 */
+  /* ./parser//parser.nit:8851 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7776);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8851);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22263,14 +24982,14 @@ void parser___ReduceAction243___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction244___action(val_t p0, val_t p1){
+void parser___ReduceAction277___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7781;
-  fra.me.meth = LOCATE_parser___ReduceAction244___action;
+  fra.me.line = 8856;
+  fra.me.meth = LOCATE_parser___ReduceAction277___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -22283,51 +25002,51 @@ void parser___ReduceAction244___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7783 */
+  /* ./parser//parser.nit:8858 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7784 */
+  /* ./parser//parser.nit:8859 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7785 */
+  /* ./parser//parser.nit:8860 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7786 */
+  /* ./parser//parser.nit:8861 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7787 */
+  /* ./parser//parser.nit:8862 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7788 */
+  /* ./parser//parser.nit:8863 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7790 */
+  /* ./parser//parser.nit:8865 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8865);
   }
-  /* ./parser//parser.nit:7792 */
+  /* ./parser//parser.nit:8867 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8867);
   }
-  /* ./parser//parser.nit:7794 */
+  /* ./parser//parser.nit:8869 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8869);
   }
-  /* ./parser//parser.nit:7796 */
+  /* ./parser//parser.nit:8871 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8871);
   }
-  /* ./parser//parser.nit:7797 */
+  /* ./parser//parser.nit:8872 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7805 */
+  /* ./parser//parser.nit:8880 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7806 */
+  /* ./parser//parser.nit:8881 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7806);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8881);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22335,14 +25054,14 @@ void parser___ReduceAction244___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction245___action(val_t p0, val_t p1){
+void parser___ReduceAction278___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7811;
-  fra.me.meth = LOCATE_parser___ReduceAction245___action;
+  fra.me.line = 8886;
+  fra.me.meth = LOCATE_parser___ReduceAction278___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -22356,66 +25075,66 @@ void parser___ReduceAction245___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7813 */
+  /* ./parser//parser.nit:8888 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7814 */
+  /* ./parser//parser.nit:8889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7815 */
+  /* ./parser//parser.nit:8890 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7816 */
+  /* ./parser//parser.nit:8891 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7817 */
+  /* ./parser//parser.nit:8892 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7818 */
+  /* ./parser//parser.nit:8893 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7819 */
+  /* ./parser//parser.nit:8894 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7820 */
+  /* ./parser//parser.nit:8895 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7821 */
+  /* ./parser//parser.nit:8896 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7823 */
+  /* ./parser//parser.nit:8898 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8898);
   }
-  /* ./parser//parser.nit:7825 */
+  /* ./parser//parser.nit:8900 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8900);
   }
-  /* ./parser//parser.nit:7827 */
+  /* ./parser//parser.nit:8902 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8902);
   }
-  /* ./parser//parser.nit:7828 */
+  /* ./parser//parser.nit:8903 */
   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:7830 */
+  /* ./parser//parser.nit:8905 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7830);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8905);
   }
-  /* ./parser//parser.nit:7832 */
+  /* ./parser//parser.nit:8907 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8907);
   }
-  /* ./parser//parser.nit:7833 */
+  /* ./parser//parser.nit:8908 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7841 */
+  /* ./parser//parser.nit:8916 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7842 */
+  /* ./parser//parser.nit:8917 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7842);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8917);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22423,14 +25142,14 @@ void parser___ReduceAction245___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction246___action(val_t p0, val_t p1){
+void parser___ReduceAction279___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7847;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
+  fra.me.line = 8922;
+  fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -22444,62 +25163,62 @@ void parser___ReduceAction246___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7849 */
+  /* ./parser//parser.nit:8924 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7850 */
+  /* ./parser//parser.nit:8925 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7851 */
+  /* ./parser//parser.nit:8926 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7852 */
+  /* ./parser//parser.nit:8927 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7853 */
+  /* ./parser//parser.nit:8928 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7854 */
+  /* ./parser//parser.nit:8929 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7855 */
+  /* ./parser//parser.nit:8930 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7857 */
+  /* ./parser//parser.nit:8932 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8932);
   }
-  /* ./parser//parser.nit:7859 */
+  /* ./parser//parser.nit:8934 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7859);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8934);
   }
-  /* ./parser//parser.nit:7861 */
+  /* ./parser//parser.nit:8936 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7861);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8936);
   }
-  /* ./parser//parser.nit:7862 */
+  /* ./parser//parser.nit:8937 */
   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:7864 */
+  /* ./parser//parser.nit:8939 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8939);
   }
-  /* ./parser//parser.nit:7866 */
+  /* ./parser//parser.nit:8941 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8941);
   }
-  /* ./parser//parser.nit:7867 */
+  /* ./parser//parser.nit:8942 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7875 */
+  /* ./parser//parser.nit:8950 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7876 */
+  /* ./parser//parser.nit:8951 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7876);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8951);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22507,14 +25226,14 @@ void parser___ReduceAction246___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction247___action(val_t p0, val_t p1){
+void parser___ReduceAction280___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 7881;
-  fra.me.meth = LOCATE_parser___ReduceAction247___action;
+  fra.me.line = 8956;
+  fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -22526,47 +25245,47 @@ void parser___ReduceAction247___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7883 */
+  /* ./parser//parser.nit:8958 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7884 */
+  /* ./parser//parser.nit:8959 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7885 */
+  /* ./parser//parser.nit:8960 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7886 */
+  /* ./parser//parser.nit:8961 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7887 */
+  /* ./parser//parser.nit:8962 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7888 */
+  /* ./parser//parser.nit:8963 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7889 */
+  /* ./parser//parser.nit:8964 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7891 */
+  /* ./parser//parser.nit:8966 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8966);
   }
-  /* ./parser//parser.nit:7893 */
+  /* ./parser//parser.nit:8968 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8968);
   }
-  /* ./parser//parser.nit:7895 */
+  /* ./parser//parser.nit:8970 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8970);
   }
-  /* ./parser//parser.nit:7896 */
+  /* ./parser//parser.nit:8971 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7904 */
+  /* ./parser//parser.nit:8979 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7905 */
+  /* ./parser//parser.nit:8980 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7905);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8980);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22574,14 +25293,14 @@ void parser___ReduceAction247___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction248___action(val_t p0, val_t p1){
+void parser___ReduceAction281___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7910;
-  fra.me.meth = LOCATE_parser___ReduceAction248___action;
+  fra.me.line = 8985;
+  fra.me.meth = LOCATE_parser___ReduceAction281___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -22594,62 +25313,62 @@ void parser___ReduceAction248___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7912 */
+  /* ./parser//parser.nit:8987 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7913 */
+  /* ./parser//parser.nit:8988 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7914 */
+  /* ./parser//parser.nit:8989 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7915 */
+  /* ./parser//parser.nit:8990 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7916 */
+  /* ./parser//parser.nit:8991 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7917 */
+  /* ./parser//parser.nit:8992 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7918 */
+  /* ./parser//parser.nit:8993 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7919 */
+  /* ./parser//parser.nit:8994 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7920 */
+  /* ./parser//parser.nit:8995 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7921 */
+  /* ./parser//parser.nit:8996 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7923 */
+  /* ./parser//parser.nit:8998 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7923);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8998);
   }
-  /* ./parser//parser.nit:7925 */
+  /* ./parser//parser.nit:9000 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9000);
   }
-  /* ./parser//parser.nit:7927 */
+  /* ./parser//parser.nit:9002 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9002);
   }
-  /* ./parser//parser.nit:7928 */
+  /* ./parser//parser.nit:9003 */
   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:7930 */
+  /* ./parser//parser.nit:9005 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9005);
   }
-  /* ./parser//parser.nit:7931 */
+  /* ./parser//parser.nit:9006 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7939 */
+  /* ./parser//parser.nit:9014 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7940 */
+  /* ./parser//parser.nit:9015 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7940);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9015);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22657,14 +25376,14 @@ void parser___ReduceAction248___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction249___action(val_t p0, val_t p1){
+void parser___ReduceAction282___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7945;
-  fra.me.meth = LOCATE_parser___ReduceAction249___action;
+  fra.me.line = 9020;
+  fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -22677,58 +25396,58 @@ void parser___ReduceAction249___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7947 */
+  /* ./parser//parser.nit:9022 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7948 */
+  /* ./parser//parser.nit:9023 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7949 */
+  /* ./parser//parser.nit:9024 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7950 */
+  /* ./parser//parser.nit:9025 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7951 */
+  /* ./parser//parser.nit:9026 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7952 */
+  /* ./parser//parser.nit:9027 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7953 */
+  /* ./parser//parser.nit:9028 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7954 */
+  /* ./parser//parser.nit:9029 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7956 */
+  /* ./parser//parser.nit:9031 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7956);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9031);
   }
-  /* ./parser//parser.nit:7958 */
+  /* ./parser//parser.nit:9033 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9033);
   }
-  /* ./parser//parser.nit:7960 */
+  /* ./parser//parser.nit:9035 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7960);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9035);
   }
-  /* ./parser//parser.nit:7961 */
+  /* ./parser//parser.nit:9036 */
   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:7963 */
+  /* ./parser//parser.nit:9038 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9038);
   }
-  /* ./parser//parser.nit:7964 */
+  /* ./parser//parser.nit:9039 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7972 */
+  /* ./parser//parser.nit:9047 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7973 */
+  /* ./parser//parser.nit:9048 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7973);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9048);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22736,14 +25455,14 @@ void parser___ReduceAction249___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction250___action(val_t p0, val_t p1){
+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 = 7978;
-  fra.me.meth = LOCATE_parser___ReduceAction250___action;
+  fra.me.line = 9053;
+  fra.me.meth = LOCATE_parser___ReduceAction283___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -22756,53 +25475,53 @@ void parser___ReduceAction250___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7980 */
+  /* ./parser//parser.nit:9055 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7981 */
+  /* ./parser//parser.nit:9056 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7982 */
+  /* ./parser//parser.nit:9057 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7983 */
+  /* ./parser//parser.nit:9058 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7984 */
+  /* ./parser//parser.nit:9059 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7985 */
+  /* ./parser//parser.nit:9060 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7986 */
+  /* ./parser//parser.nit:9061 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:7988 */
+  /* ./parser//parser.nit:9063 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7988);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9063);
   }
-  /* ./parser//parser.nit:7990 */
+  /* ./parser//parser.nit:9065 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7990);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9065);
   }
-  /* ./parser//parser.nit:7992 */
+  /* ./parser//parser.nit:9067 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7992);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9067);
   }
-  /* ./parser//parser.nit:7994 */
+  /* ./parser//parser.nit:9069 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9069);
   }
-  /* ./parser//parser.nit:7995 */
+  /* ./parser//parser.nit:9070 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8003 */
+  /* ./parser//parser.nit:9078 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8004 */
+  /* ./parser//parser.nit:9079 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8004);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9079);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22810,14 +25529,14 @@ void parser___ReduceAction250___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction251___action(val_t p0, val_t p1){
+void parser___ReduceAction284___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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___ReduceAction251___action;
+  fra.me.line = 9084;
+  fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -22831,68 +25550,68 @@ void parser___ReduceAction251___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8011 */
+  /* ./parser//parser.nit:9086 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8012 */
+  /* ./parser//parser.nit:9087 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8013 */
+  /* ./parser//parser.nit:9088 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8014 */
+  /* ./parser//parser.nit:9089 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8015 */
+  /* ./parser//parser.nit:9090 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8016 */
+  /* ./parser//parser.nit:9091 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8017 */
+  /* ./parser//parser.nit:9092 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8018 */
+  /* ./parser//parser.nit:9093 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8019 */
+  /* ./parser//parser.nit:9094 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8020 */
+  /* ./parser//parser.nit:9095 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8022 */
+  /* ./parser//parser.nit:9097 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9097);
   }
-  /* ./parser//parser.nit:8024 */
+  /* ./parser//parser.nit:9099 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9099);
   }
-  /* ./parser//parser.nit:8026 */
+  /* ./parser//parser.nit:9101 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9101);
   }
-  /* ./parser//parser.nit:8027 */
+  /* ./parser//parser.nit:9102 */
   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:8029 */
+  /* ./parser//parser.nit:9104 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9104);
   }
-  /* ./parser//parser.nit:8031 */
+  /* ./parser//parser.nit:9106 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9106);
   }
-  /* ./parser//parser.nit:8032 */
+  /* ./parser//parser.nit:9107 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8040 */
+  /* ./parser//parser.nit:9115 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8041 */
+  /* ./parser//parser.nit:9116 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8041);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9116);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22900,14 +25619,14 @@ void parser___ReduceAction251___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction252___action(val_t p0, val_t p1){
+void parser___ReduceAction285___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8046;
-  fra.me.meth = LOCATE_parser___ReduceAction252___action;
+  fra.me.line = 9121;
+  fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -22921,64 +25640,64 @@ void parser___ReduceAction252___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8048 */
+  /* ./parser//parser.nit:9123 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8049 */
+  /* ./parser//parser.nit:9124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8050 */
+  /* ./parser//parser.nit:9125 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8051 */
+  /* ./parser//parser.nit:9126 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8052 */
+  /* ./parser//parser.nit:9127 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8053 */
+  /* ./parser//parser.nit:9128 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8054 */
+  /* ./parser//parser.nit:9129 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8055 */
+  /* ./parser//parser.nit:9130 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8057 */
+  /* ./parser//parser.nit:9132 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8057);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9132);
   }
-  /* ./parser//parser.nit:8059 */
+  /* ./parser//parser.nit:9134 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8059);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9134);
   }
-  /* ./parser//parser.nit:8061 */
+  /* ./parser//parser.nit:9136 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9136);
   }
-  /* ./parser//parser.nit:8062 */
+  /* ./parser//parser.nit:9137 */
   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:8064 */
+  /* ./parser//parser.nit:9139 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8064);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9139);
   }
-  /* ./parser//parser.nit:8066 */
+  /* ./parser//parser.nit:9141 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8066);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9141);
   }
-  /* ./parser//parser.nit:8067 */
+  /* ./parser//parser.nit:9142 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8075 */
+  /* ./parser//parser.nit:9150 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8076 */
+  /* ./parser//parser.nit:9151 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8076);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9151);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22986,14 +25705,14 @@ void parser___ReduceAction252___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction253___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 = 8081;
-  fra.me.meth = LOCATE_parser___ReduceAction253___action;
+  fra.me.line = 9156;
+  fra.me.meth = LOCATE_parser___ReduceAction286___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -23005,45 +25724,45 @@ void parser___ReduceAction253___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8083 */
+  /* ./parser//parser.nit:9158 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8084 */
+  /* ./parser//parser.nit:9159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8085 */
+  /* ./parser//parser.nit:9160 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8086 */
+  /* ./parser//parser.nit:9161 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8087 */
+  /* ./parser//parser.nit:9162 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8088 */
+  /* ./parser//parser.nit:9163 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8090 */
+  /* ./parser//parser.nit:9165 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8090);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9165);
   }
-  /* ./parser//parser.nit:8092 */
+  /* ./parser//parser.nit:9167 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8092);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9167);
   }
-  /* ./parser//parser.nit:8094 */
+  /* ./parser//parser.nit:9169 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8094);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9169);
   }
-  /* ./parser//parser.nit:8095 */
+  /* ./parser//parser.nit:9170 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8103 */
+  /* ./parser//parser.nit:9178 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8104 */
+  /* ./parser//parser.nit:9179 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8104);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9179);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23051,14 +25770,14 @@ void parser___ReduceAction253___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction254___action(val_t p0, val_t p1){
+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 = 8109;
-  fra.me.meth = LOCATE_parser___ReduceAction254___action;
+  fra.me.line = 9184;
+  fra.me.meth = LOCATE_parser___ReduceAction287___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -23071,60 +25790,60 @@ void parser___ReduceAction254___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8111 */
+  /* ./parser//parser.nit:9186 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8112 */
+  /* ./parser//parser.nit:9187 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8113 */
+  /* ./parser//parser.nit:9188 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8114 */
+  /* ./parser//parser.nit:9189 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8115 */
+  /* ./parser//parser.nit:9190 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8116 */
+  /* ./parser//parser.nit:9191 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8117 */
+  /* ./parser//parser.nit:9192 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8118 */
+  /* ./parser//parser.nit:9193 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8119 */
+  /* ./parser//parser.nit:9194 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8121 */
+  /* ./parser//parser.nit:9196 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9196);
   }
-  /* ./parser//parser.nit:8123 */
+  /* ./parser//parser.nit:9198 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9198);
   }
-  /* ./parser//parser.nit:8125 */
+  /* ./parser//parser.nit:9200 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8125);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9200);
   }
-  /* ./parser//parser.nit:8126 */
+  /* ./parser//parser.nit:9201 */
   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:8128 */
+  /* ./parser//parser.nit:9203 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9203);
   }
-  /* ./parser//parser.nit:8129 */
+  /* ./parser//parser.nit:9204 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8137 */
+  /* ./parser//parser.nit:9212 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8138 */
+  /* ./parser//parser.nit:9213 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8138);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9213);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23132,14 +25851,14 @@ void parser___ReduceAction254___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction255___action(val_t p0, val_t p1){
+void parser___ReduceAction288___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8143;
-  fra.me.meth = LOCATE_parser___ReduceAction255___action;
+  fra.me.line = 9218;
+  fra.me.meth = LOCATE_parser___ReduceAction288___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -23152,56 +25871,56 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8145 */
+  /* ./parser//parser.nit:9220 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8146 */
+  /* ./parser//parser.nit:9221 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8147 */
+  /* ./parser//parser.nit:9222 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8148 */
+  /* ./parser//parser.nit:9223 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8149 */
+  /* ./parser//parser.nit:9224 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8150 */
+  /* ./parser//parser.nit:9225 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8151 */
+  /* ./parser//parser.nit:9226 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8153 */
+  /* ./parser//parser.nit:9228 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9228);
   }
-  /* ./parser//parser.nit:8155 */
+  /* ./parser//parser.nit:9230 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9230);
   }
-  /* ./parser//parser.nit:8157 */
+  /* ./parser//parser.nit:9232 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9232);
   }
-  /* ./parser//parser.nit:8158 */
+  /* ./parser//parser.nit:9233 */
   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:8160 */
+  /* ./parser//parser.nit:9235 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8160);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9235);
   }
-  /* ./parser//parser.nit:8161 */
+  /* ./parser//parser.nit:9236 */
   fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8169 */
+  /* ./parser//parser.nit:9244 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8170 */
+  /* ./parser//parser.nit:9245 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8170);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9245);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23209,14 +25928,14 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction256___action(val_t p0, val_t p1){
+void parser___ReduceAction289___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8175;
-  fra.me.meth = LOCATE_parser___ReduceAction256___action;
+  fra.me.line = 9250;
+  fra.me.meth = LOCATE_parser___ReduceAction289___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -23225,25 +25944,25 @@ void parser___ReduceAction256___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8177 */
+  /* ./parser//parser.nit:9252 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8178 */
+  /* ./parser//parser.nit:9253 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8180 */
+  /* ./parser//parser.nit:9255 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9255);
   }
-  /* ./parser//parser.nit:8181 */
+  /* ./parser//parser.nit:9256 */
   fra.me.REG[3] = NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8184 */
+  /* ./parser//parser.nit:9259 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8185 */
+  /* ./parser//parser.nit:9260 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8185);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9260);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23251,14 +25970,14 @@ void parser___ReduceAction256___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction257___action(val_t p0, val_t p1){
+void parser___ReduceAction290___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 = 8190;
-  fra.me.meth = LOCATE_parser___ReduceAction257___action;
+  fra.me.line = 9265;
+  fra.me.meth = LOCATE_parser___ReduceAction290___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -23267,25 +25986,25 @@ void parser___ReduceAction257___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8192 */
+  /* ./parser//parser.nit:9267 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8193 */
+  /* ./parser//parser.nit:9268 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8195 */
+  /* ./parser//parser.nit:9270 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9270);
   }
-  /* ./parser//parser.nit:8196 */
+  /* ./parser//parser.nit:9271 */
   fra.me.REG[3] = NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8199 */
+  /* ./parser//parser.nit:9274 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8200 */
+  /* ./parser//parser.nit:9275 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9275);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23293,14 +26012,14 @@ void parser___ReduceAction257___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction258___action(val_t p0, val_t p1){
+void parser___ReduceAction291___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8205;
-  fra.me.meth = LOCATE_parser___ReduceAction258___action;
+  fra.me.line = 9280;
+  fra.me.meth = LOCATE_parser___ReduceAction291___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -23309,25 +26028,25 @@ void parser___ReduceAction258___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8207 */
+  /* ./parser//parser.nit:9282 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8208 */
+  /* ./parser//parser.nit:9283 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8210 */
+  /* ./parser//parser.nit:9285 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9285);
   }
-  /* ./parser//parser.nit:8211 */
+  /* ./parser//parser.nit:9286 */
   fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8216 */
+  /* ./parser//parser.nit:9291 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8217 */
+  /* ./parser//parser.nit:9292 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8217);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9292);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23335,14 +26054,14 @@ void parser___ReduceAction258___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction259___action(val_t p0, val_t p1){
+void parser___ReduceAction292___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 = 8222;
-  fra.me.meth = LOCATE_parser___ReduceAction259___action;
+  fra.me.line = 9297;
+  fra.me.meth = LOCATE_parser___ReduceAction292___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -23352,33 +26071,33 @@ void parser___ReduceAction259___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8224 */
+  /* ./parser//parser.nit:9299 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8225 */
+  /* ./parser//parser.nit:9300 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8226 */
+  /* ./parser//parser.nit:9301 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8228 */
+  /* ./parser//parser.nit:9303 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8228);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9303);
   }
-  /* ./parser//parser.nit:8230 */
+  /* ./parser//parser.nit:9305 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8230);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9305);
   }
-  /* ./parser//parser.nit:8231 */
+  /* ./parser//parser.nit:9306 */
   fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8238 */
+  /* ./parser//parser.nit:9313 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8239 */
+  /* ./parser//parser.nit:9314 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8239);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9314);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23386,14 +26105,14 @@ void parser___ReduceAction259___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction260___action(val_t p0, val_t p1){
+void parser___ReduceAction293___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8244;
-  fra.me.meth = LOCATE_parser___ReduceAction260___action;
+  fra.me.line = 9319;
+  fra.me.meth = LOCATE_parser___ReduceAction293___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -23404,41 +26123,41 @@ void parser___ReduceAction260___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8246 */
+  /* ./parser//parser.nit:9321 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8247 */
+  /* ./parser//parser.nit:9322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8248 */
+  /* ./parser//parser.nit:9323 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8249 */
+  /* ./parser//parser.nit:9324 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8251 */
+  /* ./parser//parser.nit:9326 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9326);
   }
-  /* ./parser//parser.nit:8253 */
+  /* ./parser//parser.nit:9328 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9328);
   }
-  /* ./parser//parser.nit:8255 */
+  /* ./parser//parser.nit:9330 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8255);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9330);
   }
-  /* ./parser//parser.nit:8256 */
+  /* ./parser//parser.nit:9331 */
   fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8263 */
+  /* ./parser//parser.nit:9338 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8264 */
+  /* ./parser//parser.nit:9339 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8264);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9339);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23446,14 +26165,14 @@ void parser___ReduceAction260___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction261___action(val_t p0, val_t p1){
+void parser___ReduceAction294___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8269;
-  fra.me.meth = LOCATE_parser___ReduceAction261___action;
+  fra.me.line = 9344;
+  fra.me.meth = LOCATE_parser___ReduceAction294___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -23465,51 +26184,51 @@ void parser___ReduceAction261___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8271 */
+  /* ./parser//parser.nit:9346 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8272 */
+  /* ./parser//parser.nit:9347 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8273 */
+  /* ./parser//parser.nit:9348 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8274 */
+  /* ./parser//parser.nit:9349 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8275 */
+  /* ./parser//parser.nit:9350 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8276 */
+  /* ./parser//parser.nit:9351 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8278 */
+  /* ./parser//parser.nit:9353 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8278);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9353);
   }
-  /* ./parser//parser.nit:8280 */
+  /* ./parser//parser.nit:9355 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8280);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9355);
   }
-  /* ./parser//parser.nit:8282 */
+  /* ./parser//parser.nit:9357 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9357);
   }
-  /* ./parser//parser.nit:8284 */
+  /* ./parser//parser.nit:9359 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9359);
   }
-  /* ./parser//parser.nit:8285 */
+  /* ./parser//parser.nit:9360 */
   fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8292 */
+  /* ./parser//parser.nit:9367 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8293 */
+  /* ./parser//parser.nit:9368 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9368);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23517,14 +26236,14 @@ void parser___ReduceAction261___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction262___action(val_t p0, val_t p1){
+void parser___ReduceAction295___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8298;
-  fra.me.meth = LOCATE_parser___ReduceAction262___action;
+  fra.me.line = 9373;
+  fra.me.meth = LOCATE_parser___ReduceAction295___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -23537,59 +26256,59 @@ void parser___ReduceAction262___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8300 */
+  /* ./parser//parser.nit:9375 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8301 */
+  /* ./parser//parser.nit:9376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8302 */
+  /* ./parser//parser.nit:9377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8303 */
+  /* ./parser//parser.nit:9378 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8304 */
+  /* ./parser//parser.nit:9379 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8305 */
+  /* ./parser//parser.nit:9380 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8306 */
+  /* ./parser//parser.nit:9381 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8308 */
+  /* ./parser//parser.nit:9383 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9383);
   }
-  /* ./parser//parser.nit:8310 */
+  /* ./parser//parser.nit:9385 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9385);
   }
-  /* ./parser//parser.nit:8312 */
+  /* ./parser//parser.nit:9387 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9387);
   }
-  /* ./parser//parser.nit:8314 */
+  /* ./parser//parser.nit:9389 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9389);
   }
-  /* ./parser//parser.nit:8316 */
+  /* ./parser//parser.nit:9391 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9391);
   }
-  /* ./parser//parser.nit:8317 */
+  /* ./parser//parser.nit:9392 */
   fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8324 */
+  /* ./parser//parser.nit:9399 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8325 */
+  /* ./parser//parser.nit:9400 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8325);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9400);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23597,14 +26316,14 @@ void parser___ReduceAction262___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction263___action(val_t p0, val_t p1){
+void parser___ReduceAction296___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8330;
-  fra.me.meth = LOCATE_parser___ReduceAction263___action;
+  fra.me.line = 9405;
+  fra.me.meth = LOCATE_parser___ReduceAction296___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -23616,53 +26335,53 @@ void parser___ReduceAction263___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8332 */
+  /* ./parser//parser.nit:9407 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8333 */
+  /* ./parser//parser.nit:9408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8334 */
+  /* ./parser//parser.nit:9409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8335 */
+  /* ./parser//parser.nit:9410 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8336 */
+  /* ./parser//parser.nit:9411 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8337 */
+  /* ./parser//parser.nit:9412 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8338 */
+  /* ./parser//parser.nit:9413 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8340 */
+  /* ./parser//parser.nit:9415 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9415);
   }
-  /* ./parser//parser.nit:8342 */
+  /* ./parser//parser.nit:9417 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9417);
   }
-  /* ./parser//parser.nit:8344 */
+  /* ./parser//parser.nit:9419 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9419);
   }
-  /* ./parser//parser.nit:8346 */
+  /* ./parser//parser.nit:9421 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9421);
   }
-  /* ./parser//parser.nit:8347 */
+  /* ./parser//parser.nit:9422 */
   fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8353 */
+  /* ./parser//parser.nit:9428 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8354 */
+  /* ./parser//parser.nit:9429 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8354);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9429);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23670,14 +26389,14 @@ void parser___ReduceAction263___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction264___action(val_t p0, val_t p1){
+void parser___ReduceAction297___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8359;
-  fra.me.meth = LOCATE_parser___ReduceAction264___action;
+  fra.me.line = 9434;
+  fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -23689,43 +26408,43 @@ void parser___ReduceAction264___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8361 */
+  /* ./parser//parser.nit:9436 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8362 */
+  /* ./parser//parser.nit:9437 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8363 */
+  /* ./parser//parser.nit:9438 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8364 */
+  /* ./parser//parser.nit:9439 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8365 */
+  /* ./parser//parser.nit:9440 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8368 */
+  /* ./parser//parser.nit:9443 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9443);
   }
-  /* ./parser//parser.nit:8370 */
+  /* ./parser//parser.nit:9445 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9445);
   }
-  /* ./parser//parser.nit:8372 */
+  /* ./parser//parser.nit:9447 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9447);
   }
-  /* ./parser//parser.nit:8373 */
+  /* ./parser//parser.nit:9448 */
   fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8379 */
+  /* ./parser//parser.nit:9454 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8380 */
+  /* ./parser//parser.nit:9455 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8380);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9455);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23733,14 +26452,14 @@ void parser___ReduceAction264___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction265___action(val_t p0, val_t p1){
+void parser___ReduceAction298___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8385;
-  fra.me.meth = LOCATE_parser___ReduceAction265___action;
+  fra.me.line = 9460;
+  fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -23754,66 +26473,66 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8387 */
+  /* ./parser//parser.nit:9462 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8388 */
+  /* ./parser//parser.nit:9463 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8389 */
+  /* ./parser//parser.nit:9464 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8390 */
+  /* ./parser//parser.nit:9465 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8391 */
+  /* ./parser//parser.nit:9466 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8392 */
+  /* ./parser//parser.nit:9467 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8393 */
+  /* ./parser//parser.nit:9468 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8394 */
+  /* ./parser//parser.nit:9469 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8395 */
+  /* ./parser//parser.nit:9470 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8397 */
+  /* ./parser//parser.nit:9472 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9472);
   }
-  /* ./parser//parser.nit:8399 */
+  /* ./parser//parser.nit:9474 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9474);
   }
-  /* ./parser//parser.nit:8401 */
+  /* ./parser//parser.nit:9476 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8401);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9476);
   }
-  /* ./parser//parser.nit:8402 */
+  /* ./parser//parser.nit:9477 */
   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:8404 */
+  /* ./parser//parser.nit:9479 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8404);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9479);
   }
-  /* ./parser//parser.nit:8406 */
+  /* ./parser//parser.nit:9481 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8406);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9481);
   }
-  /* ./parser//parser.nit:8407 */
+  /* ./parser//parser.nit:9482 */
   fra.me.REG[3] = NEW_ACallAssignExpr_parser___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:8414 */
+  /* ./parser//parser.nit:9489 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8415 */
+  /* ./parser//parser.nit:9490 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8415);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9490);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23821,14 +26540,14 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction266___action(val_t p0, val_t p1){
+void parser___ReduceAction299___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8420;
-  fra.me.meth = LOCATE_parser___ReduceAction266___action;
+  fra.me.line = 9495;
+  fra.me.meth = LOCATE_parser___ReduceAction299___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -23842,56 +26561,56 @@ void parser___ReduceAction266___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8422 */
+  /* ./parser//parser.nit:9497 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8423 */
+  /* ./parser//parser.nit:9498 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8424 */
+  /* ./parser//parser.nit:9499 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8425 */
+  /* ./parser//parser.nit:9500 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8426 */
+  /* ./parser//parser.nit:9501 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8427 */
+  /* ./parser//parser.nit:9502 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8428 */
+  /* ./parser//parser.nit:9503 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8431 */
+  /* ./parser//parser.nit:9506 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8431);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9506);
   }
-  /* ./parser//parser.nit:8433 */
+  /* ./parser//parser.nit:9508 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8433);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9508);
   }
-  /* ./parser//parser.nit:8434 */
+  /* ./parser//parser.nit:9509 */
   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:8436 */
+  /* ./parser//parser.nit:9511 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9511);
   }
-  /* ./parser//parser.nit:8438 */
+  /* ./parser//parser.nit:9513 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9513);
   }
-  /* ./parser//parser.nit:8439 */
+  /* ./parser//parser.nit:9514 */
   fra.me.REG[3] = NEW_ACallAssignExpr_parser___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:8446 */
+  /* ./parser//parser.nit:9521 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8447 */
+  /* ./parser//parser.nit:9522 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8447);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9522);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23899,14 +26618,14 @@ void parser___ReduceAction266___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction267___action(val_t p0, val_t p1){
+void parser___ReduceAction300___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8452;
-  fra.me.meth = LOCATE_parser___ReduceAction267___action;
+  fra.me.line = 9527;
+  fra.me.meth = LOCATE_parser___ReduceAction300___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -23919,54 +26638,54 @@ void parser___ReduceAction267___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8454 */
+  /* ./parser//parser.nit:9529 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8455 */
+  /* ./parser//parser.nit:9530 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8456 */
+  /* ./parser//parser.nit:9531 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8457 */
+  /* ./parser//parser.nit:9532 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8458 */
+  /* ./parser//parser.nit:9533 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8459 */
+  /* ./parser//parser.nit:9534 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8461 */
+  /* ./parser//parser.nit:9536 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8461);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9536);
   }
-  /* ./parser//parser.nit:8463 */
+  /* ./parser//parser.nit:9538 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9538);
   }
-  /* ./parser//parser.nit:8464 */
+  /* ./parser//parser.nit:9539 */
   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:8466 */
+  /* ./parser//parser.nit:9541 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9541);
   }
-  /* ./parser//parser.nit:8468 */
+  /* ./parser//parser.nit:9543 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9543);
   }
-  /* ./parser//parser.nit:8469 */
+  /* ./parser//parser.nit:9544 */
   fra.me.REG[3] = NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8475 */
+  /* ./parser//parser.nit:9550 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8476 */
+  /* ./parser//parser.nit:9551 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8476);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9551);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23974,14 +26693,14 @@ void parser___ReduceAction267___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction268___action(val_t p0, val_t p1){
+void parser___ReduceAction301___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8481;
-  fra.me.meth = LOCATE_parser___ReduceAction268___action;
+  fra.me.line = 9556;
+  fra.me.meth = LOCATE_parser___ReduceAction301___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -23993,53 +26712,53 @@ void parser___ReduceAction268___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8483 */
+  /* ./parser//parser.nit:9558 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8484 */
+  /* ./parser//parser.nit:9559 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8485 */
+  /* ./parser//parser.nit:9560 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8486 */
+  /* ./parser//parser.nit:9561 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8487 */
+  /* ./parser//parser.nit:9562 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8488 */
+  /* ./parser//parser.nit:9563 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8489 */
+  /* ./parser//parser.nit:9564 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8491 */
+  /* ./parser//parser.nit:9566 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9566);
   }
-  /* ./parser//parser.nit:8493 */
+  /* ./parser//parser.nit:9568 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9568);
   }
-  /* ./parser//parser.nit:8495 */
+  /* ./parser//parser.nit:9570 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9570);
   }
-  /* ./parser//parser.nit:8497 */
+  /* ./parser//parser.nit:9572 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9572);
   }
-  /* ./parser//parser.nit:8498 */
+  /* ./parser//parser.nit:9573 */
   fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8504 */
+  /* ./parser//parser.nit:9579 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8505 */
+  /* ./parser//parser.nit:9580 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9580);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24047,14 +26766,14 @@ void parser___ReduceAction268___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction269___action(val_t p0, val_t p1){
+void parser___ReduceAction302___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8510;
-  fra.me.meth = LOCATE_parser___ReduceAction269___action;
+  fra.me.line = 9585;
+  fra.me.meth = LOCATE_parser___ReduceAction302___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -24066,43 +26785,43 @@ void parser___ReduceAction269___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8512 */
+  /* ./parser//parser.nit:9587 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8513 */
+  /* ./parser//parser.nit:9588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8514 */
+  /* ./parser//parser.nit:9589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8515 */
+  /* ./parser//parser.nit:9590 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8516 */
+  /* ./parser//parser.nit:9591 */
   fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8519 */
+  /* ./parser//parser.nit:9594 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8519);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9594);
   }
-  /* ./parser//parser.nit:8521 */
+  /* ./parser//parser.nit:9596 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8521);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9596);
   }
-  /* ./parser//parser.nit:8523 */
+  /* ./parser//parser.nit:9598 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9598);
   }
-  /* ./parser//parser.nit:8524 */
+  /* ./parser//parser.nit:9599 */
   fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8530 */
+  /* ./parser//parser.nit:9605 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8531 */
+  /* ./parser//parser.nit:9606 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8531);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9606);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24110,14 +26829,14 @@ void parser___ReduceAction269___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction270___action(val_t p0, val_t p1){
+void parser___ReduceAction303___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8536;
-  fra.me.meth = LOCATE_parser___ReduceAction270___action;
+  fra.me.line = 9611;
+  fra.me.meth = LOCATE_parser___ReduceAction303___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -24131,66 +26850,66 @@ void parser___ReduceAction270___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8538 */
+  /* ./parser//parser.nit:9613 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8539 */
+  /* ./parser//parser.nit:9614 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8540 */
+  /* ./parser//parser.nit:9615 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8541 */
+  /* ./parser//parser.nit:9616 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8542 */
+  /* ./parser//parser.nit:9617 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8543 */
+  /* ./parser//parser.nit:9618 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8544 */
+  /* ./parser//parser.nit:9619 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8545 */
+  /* ./parser//parser.nit:9620 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8546 */
+  /* ./parser//parser.nit:9621 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8548 */
+  /* ./parser//parser.nit:9623 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9623);
   }
-  /* ./parser//parser.nit:8550 */
+  /* ./parser//parser.nit:9625 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9625);
   }
-  /* ./parser//parser.nit:8552 */
+  /* ./parser//parser.nit:9627 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9627);
   }
-  /* ./parser//parser.nit:8553 */
+  /* ./parser//parser.nit:9628 */
   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:8555 */
+  /* ./parser//parser.nit:9630 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9630);
   }
-  /* ./parser//parser.nit:8557 */
+  /* ./parser//parser.nit:9632 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8557);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9632);
   }
-  /* ./parser//parser.nit:8558 */
+  /* ./parser//parser.nit:9633 */
   fra.me.REG[3] = NEW_ACallReassignExpr_parser___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:8565 */
+  /* ./parser//parser.nit:9640 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8566 */
+  /* ./parser//parser.nit:9641 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8566);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9641);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24198,14 +26917,14 @@ void parser___ReduceAction270___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction271___action(val_t p0, val_t p1){
+void parser___ReduceAction304___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8571;
-  fra.me.meth = LOCATE_parser___ReduceAction271___action;
+  fra.me.line = 9646;
+  fra.me.meth = LOCATE_parser___ReduceAction304___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -24219,56 +26938,56 @@ void parser___ReduceAction271___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8573 */
+  /* ./parser//parser.nit:9648 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8574 */
+  /* ./parser//parser.nit:9649 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8575 */
+  /* ./parser//parser.nit:9650 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8576 */
+  /* ./parser//parser.nit:9651 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8577 */
+  /* ./parser//parser.nit:9652 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8578 */
+  /* ./parser//parser.nit:9653 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8579 */
+  /* ./parser//parser.nit:9654 */
   fra.me.REG[8] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8582 */
+  /* ./parser//parser.nit:9657 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9657);
   }
-  /* ./parser//parser.nit:8584 */
+  /* ./parser//parser.nit:9659 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8584);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9659);
   }
-  /* ./parser//parser.nit:8585 */
+  /* ./parser//parser.nit:9660 */
   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:8587 */
+  /* ./parser//parser.nit:9662 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8587);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9662);
   }
-  /* ./parser//parser.nit:8589 */
+  /* ./parser//parser.nit:9664 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8589);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9664);
   }
-  /* ./parser//parser.nit:8590 */
+  /* ./parser//parser.nit:9665 */
   fra.me.REG[3] = NEW_ACallReassignExpr_parser___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:8597 */
+  /* ./parser//parser.nit:9672 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8598 */
+  /* ./parser//parser.nit:9673 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9673);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24276,14 +26995,14 @@ void parser___ReduceAction271___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction272___action(val_t p0, val_t p1){
+void parser___ReduceAction305___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8603;
-  fra.me.meth = LOCATE_parser___ReduceAction272___action;
+  fra.me.line = 9678;
+  fra.me.meth = LOCATE_parser___ReduceAction305___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -24296,54 +27015,54 @@ void parser___ReduceAction272___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8605 */
+  /* ./parser//parser.nit:9680 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8606 */
+  /* ./parser//parser.nit:9681 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8607 */
+  /* ./parser//parser.nit:9682 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8608 */
+  /* ./parser//parser.nit:9683 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8609 */
+  /* ./parser//parser.nit:9684 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8610 */
+  /* ./parser//parser.nit:9685 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8612 */
+  /* ./parser//parser.nit:9687 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8612);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9687);
   }
-  /* ./parser//parser.nit:8614 */
+  /* ./parser//parser.nit:9689 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8614);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9689);
   }
-  /* ./parser//parser.nit:8615 */
+  /* ./parser//parser.nit:9690 */
   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:8617 */
+  /* ./parser//parser.nit:9692 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9692);
   }
-  /* ./parser//parser.nit:8619 */
+  /* ./parser//parser.nit:9694 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9694);
   }
-  /* ./parser//parser.nit:8620 */
+  /* ./parser//parser.nit:9695 */
   fra.me.REG[3] = NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8626 */
+  /* ./parser//parser.nit:9701 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8627 */
+  /* ./parser//parser.nit:9702 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8627);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9702);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24351,14 +27070,14 @@ void parser___ReduceAction272___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction273___action(val_t p0, val_t p1){
+void parser___ReduceAction306___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 = 8632;
-  fra.me.meth = LOCATE_parser___ReduceAction273___action;
+  fra.me.line = 9707;
+  fra.me.meth = LOCATE_parser___ReduceAction306___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -24367,25 +27086,25 @@ void parser___ReduceAction273___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8634 */
+  /* ./parser//parser.nit:9709 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8635 */
+  /* ./parser//parser.nit:9710 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8637 */
+  /* ./parser//parser.nit:9712 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast nullable TPluseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8637);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9712);
   }
-  /* ./parser//parser.nit:8638 */
+  /* ./parser//parser.nit:9713 */
   fra.me.REG[3] = NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:8641 */
+  /* ./parser//parser.nit:9716 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8642 */
+  /* ./parser//parser.nit:9717 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8642);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9717);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24393,14 +27112,14 @@ void parser___ReduceAction273___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction274___action(val_t p0, val_t p1){
+void parser___ReduceAction307___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 = 8647;
-  fra.me.meth = LOCATE_parser___ReduceAction274___action;
+  fra.me.line = 9722;
+  fra.me.meth = LOCATE_parser___ReduceAction307___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -24409,25 +27128,25 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8649 */
+  /* ./parser//parser.nit:9724 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8650 */
+  /* ./parser//parser.nit:9725 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8652 */
+  /* ./parser//parser.nit:9727 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast nullable TMinuseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
   }
-  /* ./parser//parser.nit:8653 */
+  /* ./parser//parser.nit:9728 */
   fra.me.REG[3] = NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:8656 */
+  /* ./parser//parser.nit:9731 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8657 */
+  /* ./parser//parser.nit:9732 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8657);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9732);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24435,14 +27154,14 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction275___action(val_t p0, val_t p1){
+void parser___ReduceAction308___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 = 8662;
-  fra.me.meth = LOCATE_parser___ReduceAction275___action;
+  fra.me.line = 9737;
+  fra.me.meth = LOCATE_parser___ReduceAction308___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24453,41 +27172,41 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8664 */
+  /* ./parser//parser.nit:9739 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8665 */
+  /* ./parser//parser.nit:9740 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8666 */
+  /* ./parser//parser.nit:9741 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8667 */
+  /* ./parser//parser.nit:9742 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8669 */
+  /* ./parser//parser.nit:9744 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9744);
   }
-  /* ./parser//parser.nit:8671 */
+  /* ./parser//parser.nit:9746 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9746);
   }
-  /* ./parser//parser.nit:8673 */
+  /* ./parser//parser.nit:9748 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9748);
   }
-  /* ./parser//parser.nit:8674 */
+  /* ./parser//parser.nit:9749 */
   fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8679 */
+  /* ./parser//parser.nit:9754 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8680 */
+  /* ./parser//parser.nit:9755 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8680);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9755);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24495,14 +27214,14 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction276___action(val_t p0, val_t p1){
+void parser___ReduceAction309___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8685;
-  fra.me.meth = LOCATE_parser___ReduceAction276___action;
+  fra.me.line = 9760;
+  fra.me.meth = LOCATE_parser___ReduceAction309___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -24512,33 +27231,33 @@ void parser___ReduceAction276___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8687 */
+  /* ./parser//parser.nit:9762 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8688 */
+  /* ./parser//parser.nit:9763 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8689 */
+  /* ./parser//parser.nit:9764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8691 */
+  /* ./parser//parser.nit:9766 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9766);
   }
-  /* ./parser//parser.nit:8693 */
+  /* ./parser//parser.nit:9768 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9768);
   }
-  /* ./parser//parser.nit:8694 */
+  /* ./parser//parser.nit:9769 */
   fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8699 */
+  /* ./parser//parser.nit:9774 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8700 */
+  /* ./parser//parser.nit:9775 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8700);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9775);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24546,14 +27265,14 @@ void parser___ReduceAction276___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction277___action(val_t p0, val_t p1){
+void parser___ReduceAction310___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8705;
-  fra.me.meth = LOCATE_parser___ReduceAction277___action;
+  fra.me.line = 9780;
+  fra.me.meth = LOCATE_parser___ReduceAction310___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -24565,57 +27284,57 @@ void parser___ReduceAction277___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8707 */
+  /* ./parser//parser.nit:9782 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8708 */
+  /* ./parser//parser.nit:9783 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8709 */
+  /* ./parser//parser.nit:9784 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8710 */
+  /* ./parser//parser.nit:9785 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8711 */
+  /* ./parser//parser.nit:9786 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8712 */
+  /* ./parser//parser.nit:9787 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8713 */
+  /* ./parser//parser.nit:9788 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8714 */
+  /* ./parser//parser.nit:9789 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8715 */
+  /* ./parser//parser.nit:9790 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8717 */
+  /* ./parser//parser.nit:9792 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8717);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9792);
   }
-  /* ./parser//parser.nit:8719 */
+  /* ./parser//parser.nit:9794 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8719);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9794);
   }
-  /* ./parser//parser.nit:8721 */
+  /* ./parser//parser.nit:9796 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9796);
   }
-  /* ./parser//parser.nit:8723 */
+  /* ./parser//parser.nit:9798 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8723);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9798);
   }
-  /* ./parser//parser.nit:8724 */
+  /* ./parser//parser.nit:9799 */
   fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8730 */
+  /* ./parser//parser.nit:9805 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8731 */
+  /* ./parser//parser.nit:9806 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8731);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9806);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24623,14 +27342,14 @@ void parser___ReduceAction277___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction278___action(val_t p0, val_t p1){
+void parser___ReduceAction311___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 = 8736;
-  fra.me.meth = LOCATE_parser___ReduceAction278___action;
+  fra.me.line = 9811;
+  fra.me.meth = LOCATE_parser___ReduceAction311___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24641,47 +27360,47 @@ void parser___ReduceAction278___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8738 */
+  /* ./parser//parser.nit:9813 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8739 */
+  /* ./parser//parser.nit:9814 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8740 */
+  /* ./parser//parser.nit:9815 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8741 */
+  /* ./parser//parser.nit:9816 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8742 */
+  /* ./parser//parser.nit:9817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8743 */
+  /* ./parser//parser.nit:9818 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8744 */
+  /* ./parser//parser.nit:9819 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8746 */
+  /* ./parser//parser.nit:9821 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9821);
   }
-  /* ./parser//parser.nit:8748 */
+  /* ./parser//parser.nit:9823 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9823);
   }
-  /* ./parser//parser.nit:8750 */
+  /* ./parser//parser.nit:9825 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9825);
   }
-  /* ./parser//parser.nit:8751 */
+  /* ./parser//parser.nit:9826 */
   fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8757 */
+  /* ./parser//parser.nit:9832 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8758 */
+  /* ./parser//parser.nit:9833 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9833);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24689,14 +27408,14 @@ void parser___ReduceAction278___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction279___action(val_t p0, val_t p1){
+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 = 8763;
-  fra.me.meth = LOCATE_parser___ReduceAction279___action;
+  fra.me.line = 9838;
+  fra.me.meth = LOCATE_parser___ReduceAction312___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -24708,57 +27427,57 @@ void parser___ReduceAction279___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8765 */
+  /* ./parser//parser.nit:9840 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8766 */
+  /* ./parser//parser.nit:9841 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8767 */
+  /* ./parser//parser.nit:9842 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8768 */
+  /* ./parser//parser.nit:9843 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8769 */
+  /* ./parser//parser.nit:9844 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8770 */
+  /* ./parser//parser.nit:9845 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8771 */
+  /* ./parser//parser.nit:9846 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8772 */
+  /* ./parser//parser.nit:9847 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8773 */
+  /* ./parser//parser.nit:9848 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8775 */
+  /* ./parser//parser.nit:9850 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9850);
   }
-  /* ./parser//parser.nit:8777 */
+  /* ./parser//parser.nit:9852 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8777);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9852);
   }
-  /* ./parser//parser.nit:8779 */
+  /* ./parser//parser.nit:9854 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9854);
   }
-  /* ./parser//parser.nit:8781 */
+  /* ./parser//parser.nit:9856 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8781);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9856);
   }
-  /* ./parser//parser.nit:8782 */
+  /* ./parser//parser.nit:9857 */
   fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8788 */
+  /* ./parser//parser.nit:9863 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8789 */
+  /* ./parser//parser.nit:9864 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8789);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9864);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24766,14 +27485,14 @@ void parser___ReduceAction279___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction280___action(val_t p0, val_t p1){
+void parser___ReduceAction313___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 = 8794;
-  fra.me.meth = LOCATE_parser___ReduceAction280___action;
+  fra.me.line = 9869;
+  fra.me.meth = LOCATE_parser___ReduceAction313___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24784,47 +27503,47 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8796 */
+  /* ./parser//parser.nit:9871 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8797 */
+  /* ./parser//parser.nit:9872 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8798 */
+  /* ./parser//parser.nit:9873 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8799 */
+  /* ./parser//parser.nit:9874 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8800 */
+  /* ./parser//parser.nit:9875 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8801 */
+  /* ./parser//parser.nit:9876 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8802 */
+  /* ./parser//parser.nit:9877 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8804 */
+  /* ./parser//parser.nit:9879 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9879);
   }
-  /* ./parser//parser.nit:8806 */
+  /* ./parser//parser.nit:9881 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9881);
   }
-  /* ./parser//parser.nit:8808 */
+  /* ./parser//parser.nit:9883 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8808);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9883);
   }
-  /* ./parser//parser.nit:8809 */
+  /* ./parser//parser.nit:9884 */
   fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8815 */
+  /* ./parser//parser.nit:9890 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8816 */
+  /* ./parser//parser.nit:9891 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8816);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9891);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24832,14 +27551,14 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction281___action(val_t p0, val_t p1){
+void parser___ReduceAction314___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8821;
-  fra.me.meth = LOCATE_parser___ReduceAction281___action;
+  fra.me.line = 9896;
+  fra.me.meth = LOCATE_parser___ReduceAction314___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24850,49 +27569,49 @@ void parser___ReduceAction281___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8823 */
+  /* ./parser//parser.nit:9898 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8824 */
+  /* ./parser//parser.nit:9899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8825 */
+  /* ./parser//parser.nit:9900 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8826 */
+  /* ./parser//parser.nit:9901 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8827 */
+  /* ./parser//parser.nit:9902 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8828 */
+  /* ./parser//parser.nit:9903 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8829 */
+  /* ./parser//parser.nit:9904 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8830 */
+  /* ./parser//parser.nit:9905 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8832 */
+  /* ./parser//parser.nit:9907 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9907);
   }
-  /* ./parser//parser.nit:8834 */
+  /* ./parser//parser.nit:9909 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8834);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9909);
   }
-  /* ./parser//parser.nit:8836 */
+  /* ./parser//parser.nit:9911 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8836);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9911);
   }
-  /* ./parser//parser.nit:8837 */
+  /* ./parser//parser.nit:9912 */
   fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8843 */
+  /* ./parser//parser.nit:9918 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8844 */
+  /* ./parser//parser.nit:9919 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8844);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9919);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24900,14 +27619,14 @@ void parser___ReduceAction281___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction284___action(val_t p0, val_t p1){
+void parser___ReduceAction317___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8849;
-  fra.me.meth = LOCATE_parser___ReduceAction284___action;
+  fra.me.line = 9924;
+  fra.me.meth = LOCATE_parser___ReduceAction317___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -24918,41 +27637,41 @@ void parser___ReduceAction284___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8851 */
+  /* ./parser//parser.nit:9926 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8852 */
+  /* ./parser//parser.nit:9927 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8853 */
+  /* ./parser//parser.nit:9928 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8854 */
+  /* ./parser//parser.nit:9929 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8856 */
+  /* ./parser//parser.nit:9931 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9931);
   }
-  /* ./parser//parser.nit:8858 */
+  /* ./parser//parser.nit:9933 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9933);
   }
-  /* ./parser//parser.nit:8860 */
+  /* ./parser//parser.nit:9935 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9935);
   }
-  /* ./parser//parser.nit:8861 */
+  /* ./parser//parser.nit:9936 */
   fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8866 */
+  /* ./parser//parser.nit:9941 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8867 */
+  /* ./parser//parser.nit:9942 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8867);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9942);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24960,14 +27679,14 @@ void parser___ReduceAction284___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction285___action(val_t p0, val_t p1){
+void parser___ReduceAction318___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8872;
-  fra.me.meth = LOCATE_parser___ReduceAction285___action;
+  fra.me.line = 9947;
+  fra.me.meth = LOCATE_parser___ReduceAction318___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -24977,33 +27696,33 @@ void parser___ReduceAction285___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8874 */
+  /* ./parser//parser.nit:9949 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8875 */
+  /* ./parser//parser.nit:9950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8876 */
+  /* ./parser//parser.nit:9951 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8878 */
+  /* ./parser//parser.nit:9953 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8878);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9953);
   }
-  /* ./parser//parser.nit:8880 */
+  /* ./parser//parser.nit:9955 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9955);
   }
-  /* ./parser//parser.nit:8881 */
+  /* ./parser//parser.nit:9956 */
   fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8886 */
+  /* ./parser//parser.nit:9961 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8887 */
+  /* ./parser//parser.nit:9962 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8887);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9962);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25011,14 +27730,14 @@ void parser___ReduceAction285___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction286___action(val_t p0, val_t p1){
+void parser___ReduceAction319___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8892;
-  fra.me.meth = LOCATE_parser___ReduceAction286___action;
+  fra.me.line = 9967;
+  fra.me.meth = LOCATE_parser___ReduceAction319___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -25031,61 +27750,61 @@ void parser___ReduceAction286___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8894 */
+  /* ./parser//parser.nit:9969 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8895 */
+  /* ./parser//parser.nit:9970 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8896 */
+  /* ./parser//parser.nit:9971 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8897 */
+  /* ./parser//parser.nit:9972 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8898 */
+  /* ./parser//parser.nit:9973 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8899 */
+  /* ./parser//parser.nit:9974 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8900 */
+  /* ./parser//parser.nit:9975 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8901 */
+  /* ./parser//parser.nit:9976 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8903 */
+  /* ./parser//parser.nit:9978 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8903);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9978);
   }
-  /* ./parser//parser.nit:8905 */
+  /* ./parser//parser.nit:9980 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8905);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9980);
   }
-  /* ./parser//parser.nit:8907 */
+  /* ./parser//parser.nit:9982 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8907);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9982);
   }
-  /* ./parser//parser.nit:8909 */
+  /* ./parser//parser.nit:9984 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8909);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9984);
   }
-  /* ./parser//parser.nit:8911 */
+  /* ./parser//parser.nit:9986 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8911);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9986);
   }
-  /* ./parser//parser.nit:8912 */
+  /* ./parser//parser.nit:9987 */
   fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8919 */
+  /* ./parser//parser.nit:9994 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8920 */
+  /* ./parser//parser.nit:9995 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8920);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9995);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25093,14 +27812,14 @@ void parser___ReduceAction286___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction287___action(val_t p0, val_t p1){
+void parser___ReduceAction320___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8925;
-  fra.me.meth = LOCATE_parser___ReduceAction287___action;
+  fra.me.line = 10000;
+  fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -25112,53 +27831,53 @@ void parser___ReduceAction287___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8927 */
+  /* ./parser//parser.nit:10002 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8928 */
+  /* ./parser//parser.nit:10003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8929 */
+  /* ./parser//parser.nit:10004 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8930 */
+  /* ./parser//parser.nit:10005 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8931 */
+  /* ./parser//parser.nit:10006 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8932 */
+  /* ./parser//parser.nit:10007 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8933 */
+  /* ./parser//parser.nit:10008 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8935 */
+  /* ./parser//parser.nit:10010 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10010);
   }
-  /* ./parser//parser.nit:8937 */
+  /* ./parser//parser.nit:10012 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8937);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10012);
   }
-  /* ./parser//parser.nit:8939 */
+  /* ./parser//parser.nit:10014 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8939);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10014);
   }
-  /* ./parser//parser.nit:8941 */
+  /* ./parser//parser.nit:10016 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8941);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10016);
   }
-  /* ./parser//parser.nit:8942 */
+  /* ./parser//parser.nit:10017 */
   fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8949 */
+  /* ./parser//parser.nit:10024 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8950 */
+  /* ./parser//parser.nit:10025 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10025);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25166,14 +27885,14 @@ void parser___ReduceAction287___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction288___action(val_t p0, val_t p1){
+void parser___ReduceAction321___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8955;
-  fra.me.meth = LOCATE_parser___ReduceAction288___action;
+  fra.me.line = 10030;
+  fra.me.meth = LOCATE_parser___ReduceAction321___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -25188,84 +27907,84 @@ void parser___ReduceAction288___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8957 */
+  /* ./parser//parser.nit:10032 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8958 */
+  /* ./parser//parser.nit:10033 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8959 */
+  /* ./parser//parser.nit:10034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8960 */
+  /* ./parser//parser.nit:10035 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8961 */
+  /* ./parser//parser.nit:10036 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8962 */
+  /* ./parser//parser.nit:10037 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8963 */
+  /* ./parser//parser.nit:10038 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8964 */
+  /* ./parser//parser.nit:10039 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8965 */
+  /* ./parser//parser.nit:10040 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8966 */
+  /* ./parser//parser.nit:10041 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8967 */
+  /* ./parser//parser.nit:10042 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8968 */
+  /* ./parser//parser.nit:10043 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8969 */
+  /* ./parser//parser.nit:10044 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8970 */
+  /* ./parser//parser.nit:10045 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8971 */
+  /* ./parser//parser.nit:10046 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:8973 */
+  /* ./parser//parser.nit:10048 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10048);
   }
-  /* ./parser//parser.nit:8975 */
+  /* ./parser//parser.nit:10050 */
   REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10050);
   }
-  /* ./parser//parser.nit:8976 */
+  /* ./parser//parser.nit:10051 */
   fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
   fra.me.REG[9] = fra.me.REG[7];
-  /* ./parser//parser.nit:8978 */
+  /* ./parser//parser.nit:10053 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10053);
   }
-  /* ./parser//parser.nit:8980 */
+  /* ./parser//parser.nit:10055 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10055);
   }
-  /* ./parser//parser.nit:8982 */
+  /* ./parser//parser.nit:10057 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8982);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10057);
   }
-  /* ./parser//parser.nit:8984 */
+  /* ./parser//parser.nit:10059 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8984);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10059);
   }
-  /* ./parser//parser.nit:8985 */
+  /* ./parser//parser.nit:10060 */
   fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8993 */
+  /* ./parser//parser.nit:10068 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8994 */
+  /* ./parser//parser.nit:10069 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8994);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10069);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25273,14 +27992,14 @@ void parser___ReduceAction288___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction289___action(val_t p0, val_t p1){
+void parser___ReduceAction322___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 8999;
-  fra.me.meth = LOCATE_parser___ReduceAction289___action;
+  fra.me.line = 10074;
+  fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.REG[0] = NIT_NULL;
@@ -25295,80 +28014,80 @@ void parser___ReduceAction289___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9001 */
+  /* ./parser//parser.nit:10076 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9002 */
+  /* ./parser//parser.nit:10077 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9003 */
+  /* ./parser//parser.nit:10078 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9004 */
+  /* ./parser//parser.nit:10079 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9005 */
+  /* ./parser//parser.nit:10080 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9006 */
+  /* ./parser//parser.nit:10081 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9007 */
+  /* ./parser//parser.nit:10082 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9008 */
+  /* ./parser//parser.nit:10083 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9009 */
+  /* ./parser//parser.nit:10084 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9010 */
+  /* ./parser//parser.nit:10085 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9011 */
+  /* ./parser//parser.nit:10086 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9012 */
+  /* ./parser//parser.nit:10087 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9013 */
+  /* ./parser//parser.nit:10088 */
   fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9015 */
+  /* ./parser//parser.nit:10090 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10090);
   }
-  /* ./parser//parser.nit:9017 */
+  /* ./parser//parser.nit:10092 */
   REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10092);
   }
-  /* ./parser//parser.nit:9018 */
+  /* ./parser//parser.nit:10093 */
   fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
   fra.me.REG[9] = fra.me.REG[7];
-  /* ./parser//parser.nit:9020 */
+  /* ./parser//parser.nit:10095 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10095);
   }
-  /* ./parser//parser.nit:9022 */
+  /* ./parser//parser.nit:10097 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10097);
   }
-  /* ./parser//parser.nit:9024 */
+  /* ./parser//parser.nit:10099 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10099);
   }
-  /* ./parser//parser.nit:9026 */
+  /* ./parser//parser.nit:10101 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10101);
   }
-  /* ./parser//parser.nit:9027 */
+  /* ./parser//parser.nit:10102 */
   fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9035 */
+  /* ./parser//parser.nit:10110 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9036 */
+  /* ./parser//parser.nit:10111 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9036);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10111);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25376,14 +28095,14 @@ void parser___ReduceAction289___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction290___action(val_t p0, val_t p1){
+void parser___ReduceAction323___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 = 9041;
-  fra.me.meth = LOCATE_parser___ReduceAction290___action;
+  fra.me.line = 10116;
+  fra.me.meth = LOCATE_parser___ReduceAction323___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -25397,76 +28116,76 @@ void parser___ReduceAction290___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9043 */
+  /* ./parser//parser.nit:10118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9044 */
+  /* ./parser//parser.nit:10119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9045 */
+  /* ./parser//parser.nit:10120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9046 */
+  /* ./parser//parser.nit:10121 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9047 */
+  /* ./parser//parser.nit:10122 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9048 */
+  /* ./parser//parser.nit:10123 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9049 */
+  /* ./parser//parser.nit:10124 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9050 */
+  /* ./parser//parser.nit:10125 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9051 */
+  /* ./parser//parser.nit:10126 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9052 */
+  /* ./parser//parser.nit:10127 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9053 */
+  /* ./parser//parser.nit:10128 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9054 */
+  /* ./parser//parser.nit:10129 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9055 */
+  /* ./parser//parser.nit:10130 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9056 */
+  /* ./parser//parser.nit:10131 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9058 */
+  /* ./parser//parser.nit:10133 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10133);
   }
-  /* ./parser//parser.nit:9060 */
+  /* ./parser//parser.nit:10135 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10135);
   }
-  /* ./parser//parser.nit:9061 */
+  /* ./parser//parser.nit:10136 */
   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:9063 */
+  /* ./parser//parser.nit:10138 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10138);
   }
-  /* ./parser//parser.nit:9065 */
+  /* ./parser//parser.nit:10140 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10140);
   }
-  /* ./parser//parser.nit:9067 */
+  /* ./parser//parser.nit:10142 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10142);
   }
-  /* ./parser//parser.nit:9068 */
+  /* ./parser//parser.nit:10143 */
   fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9076 */
+  /* ./parser//parser.nit:10151 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9077 */
+  /* ./parser//parser.nit:10152 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9077);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10152);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25474,14 +28193,14 @@ void parser___ReduceAction290___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction291___action(val_t p0, val_t p1){
+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 = 9082;
-  fra.me.meth = LOCATE_parser___ReduceAction291___action;
+  fra.me.line = 10157;
+  fra.me.meth = LOCATE_parser___ReduceAction324___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -25495,72 +28214,72 @@ void parser___ReduceAction291___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9084 */
+  /* ./parser//parser.nit:10159 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9085 */
+  /* ./parser//parser.nit:10160 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9086 */
+  /* ./parser//parser.nit:10161 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9087 */
+  /* ./parser//parser.nit:10162 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9088 */
+  /* ./parser//parser.nit:10163 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9089 */
+  /* ./parser//parser.nit:10164 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9090 */
+  /* ./parser//parser.nit:10165 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9091 */
+  /* ./parser//parser.nit:10166 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9092 */
+  /* ./parser//parser.nit:10167 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9093 */
+  /* ./parser//parser.nit:10168 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9094 */
+  /* ./parser//parser.nit:10169 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9095 */
+  /* ./parser//parser.nit:10170 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9097 */
+  /* ./parser//parser.nit:10172 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10172);
   }
-  /* ./parser//parser.nit:9099 */
+  /* ./parser//parser.nit:10174 */
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10174);
   }
-  /* ./parser//parser.nit:9100 */
+  /* ./parser//parser.nit:10175 */
   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:9102 */
+  /* ./parser//parser.nit:10177 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9102);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10177);
   }
-  /* ./parser//parser.nit:9104 */
+  /* ./parser//parser.nit:10179 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9104);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10179);
   }
-  /* ./parser//parser.nit:9106 */
+  /* ./parser//parser.nit:10181 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9106);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10181);
   }
-  /* ./parser//parser.nit:9107 */
+  /* ./parser//parser.nit:10182 */
   fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9115 */
+  /* ./parser//parser.nit:10190 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9116 */
+  /* ./parser//parser.nit:10191 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9116);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10191);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25568,14 +28287,14 @@ void parser___ReduceAction291___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction292___action(val_t p0, val_t p1){
+void parser___ReduceAction325___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9121;
-  fra.me.meth = LOCATE_parser___ReduceAction292___action;
+  fra.me.line = 10196;
+  fra.me.meth = LOCATE_parser___ReduceAction325___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -25586,43 +28305,43 @@ void parser___ReduceAction292___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9123 */
+  /* ./parser//parser.nit:10198 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9124 */
+  /* ./parser//parser.nit:10199 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9125 */
+  /* ./parser//parser.nit:10200 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9126 */
+  /* ./parser//parser.nit:10201 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9127 */
+  /* ./parser//parser.nit:10202 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9129 */
+  /* ./parser//parser.nit:10204 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10204);
   }
-  /* ./parser//parser.nit:9131 */
+  /* ./parser//parser.nit:10206 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10206);
   }
-  /* ./parser//parser.nit:9133 */
+  /* ./parser//parser.nit:10208 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10208);
   }
-  /* ./parser//parser.nit:9134 */
+  /* ./parser//parser.nit:10209 */
   fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9140 */
+  /* ./parser//parser.nit:10215 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9141 */
+  /* ./parser//parser.nit:10216 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9141);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10216);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25630,14 +28349,14 @@ void parser___ReduceAction292___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction293___action(val_t p0, val_t p1){
+void parser___ReduceAction326___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9146;
-  fra.me.meth = LOCATE_parser___ReduceAction293___action;
+  fra.me.line = 10221;
+  fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -25649,51 +28368,51 @@ void parser___ReduceAction293___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9148 */
+  /* ./parser//parser.nit:10223 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9149 */
+  /* ./parser//parser.nit:10224 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9150 */
+  /* ./parser//parser.nit:10225 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9151 */
+  /* ./parser//parser.nit:10226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9152 */
+  /* ./parser//parser.nit:10227 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9153 */
+  /* ./parser//parser.nit:10228 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9155 */
+  /* ./parser//parser.nit:10230 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10230);
   }
-  /* ./parser//parser.nit:9157 */
+  /* ./parser//parser.nit:10232 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10232);
   }
-  /* ./parser//parser.nit:9159 */
+  /* ./parser//parser.nit:10234 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10234);
   }
-  /* ./parser//parser.nit:9161 */
+  /* ./parser//parser.nit:10236 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10236);
   }
-  /* ./parser//parser.nit:9162 */
+  /* ./parser//parser.nit:10237 */
   fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9168 */
+  /* ./parser//parser.nit:10243 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9169 */
+  /* ./parser//parser.nit:10244 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9169);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10244);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25701,14 +28420,14 @@ void parser___ReduceAction293___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction294___action(val_t p0, val_t p1){
+void parser___ReduceAction327___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9174;
-  fra.me.meth = LOCATE_parser___ReduceAction294___action;
+  fra.me.line = 10249;
+  fra.me.meth = LOCATE_parser___ReduceAction327___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -25718,33 +28437,33 @@ void parser___ReduceAction294___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9176 */
+  /* ./parser//parser.nit:10251 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9177 */
+  /* ./parser//parser.nit:10252 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9178 */
+  /* ./parser//parser.nit:10253 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9180 */
+  /* ./parser//parser.nit:10255 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10255);
   }
-  /* ./parser//parser.nit:9182 */
+  /* ./parser//parser.nit:10257 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10257);
   }
-  /* ./parser//parser.nit:9183 */
+  /* ./parser//parser.nit:10258 */
   fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9189 */
+  /* ./parser//parser.nit:10264 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9190 */
+  /* ./parser//parser.nit:10265 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9190);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10265);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25752,14 +28471,14 @@ void parser___ReduceAction294___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction295___action(val_t p0, val_t p1){
+void parser___ReduceAction328___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9195;
-  fra.me.meth = LOCATE_parser___ReduceAction295___action;
+  fra.me.line = 10270;
+  fra.me.meth = LOCATE_parser___ReduceAction328___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -25770,41 +28489,41 @@ void parser___ReduceAction295___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9197 */
+  /* ./parser//parser.nit:10272 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9198 */
+  /* ./parser//parser.nit:10273 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9199 */
+  /* ./parser//parser.nit:10274 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9200 */
+  /* ./parser//parser.nit:10275 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9202 */
+  /* ./parser//parser.nit:10277 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9202);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10277);
   }
-  /* ./parser//parser.nit:9204 */
+  /* ./parser//parser.nit:10279 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9204);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10279);
   }
-  /* ./parser//parser.nit:9206 */
+  /* ./parser//parser.nit:10281 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9206);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10281);
   }
-  /* ./parser//parser.nit:9207 */
+  /* ./parser//parser.nit:10282 */
   fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9213 */
+  /* ./parser//parser.nit:10288 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9214 */
+  /* ./parser//parser.nit:10289 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9214);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10289);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25812,14 +28531,14 @@ void parser___ReduceAction295___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction296___action(val_t p0, val_t p1){
+void parser___ReduceAction329___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 = 9219;
-  fra.me.meth = LOCATE_parser___ReduceAction296___action;
+  fra.me.line = 10294;
+  fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25828,19 +28547,19 @@ void parser___ReduceAction296___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9221 */
+  /* ./parser//parser.nit:10296 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9222 */
+  /* ./parser//parser.nit:10297 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9223 */
+  /* ./parser//parser.nit:10298 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9225 */
+  /* ./parser//parser.nit:10300 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9226 */
+  /* ./parser//parser.nit:10301 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9226);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10301);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25848,14 +28567,14 @@ void parser___ReduceAction296___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction300___action(val_t p0, val_t p1){
+void parser___ReduceAction333___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9231;
-  fra.me.meth = LOCATE_parser___ReduceAction300___action;
+  fra.me.line = 10306;
+  fra.me.meth = LOCATE_parser___ReduceAction333___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -25868,51 +28587,51 @@ void parser___ReduceAction300___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9233 */
+  /* ./parser//parser.nit:10308 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9234 */
+  /* ./parser//parser.nit:10309 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9235 */
+  /* ./parser//parser.nit:10310 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9236 */
+  /* ./parser//parser.nit:10311 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9237 */
+  /* ./parser//parser.nit:10312 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9238 */
+  /* ./parser//parser.nit:10313 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9240 */
+  /* ./parser//parser.nit:10315 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9240);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10315);
   }
-  /* ./parser//parser.nit:9242 */
+  /* ./parser//parser.nit:10317 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10317);
   }
-  /* ./parser//parser.nit:9243 */
+  /* ./parser//parser.nit:10318 */
   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:9245 */
+  /* ./parser//parser.nit:10320 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10320);
   }
-  /* ./parser//parser.nit:9246 */
+  /* ./parser//parser.nit:10321 */
   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:9247 */
+  /* ./parser//parser.nit:10322 */
   fra.me.REG[7] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:9252 */
+  /* ./parser//parser.nit:10327 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:9253 */
+  /* ./parser//parser.nit:10328 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10328);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25920,14 +28639,14 @@ void parser___ReduceAction300___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction302___action(val_t p0, val_t p1){
+void parser___ReduceAction335___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9258;
-  fra.me.meth = LOCATE_parser___ReduceAction302___action;
+  fra.me.line = 10333;
+  fra.me.meth = LOCATE_parser___ReduceAction335___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
@@ -25941,75 +28660,75 @@ void parser___ReduceAction302___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9260 */
+  /* ./parser//parser.nit:10335 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9261 */
+  /* ./parser//parser.nit:10336 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9262 */
+  /* ./parser//parser.nit:10337 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9263 */
+  /* ./parser//parser.nit:10338 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9264 */
+  /* ./parser//parser.nit:10339 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9265 */
+  /* ./parser//parser.nit:10340 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9266 */
+  /* ./parser//parser.nit:10341 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9267 */
+  /* ./parser//parser.nit:10342 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9268 */
+  /* ./parser//parser.nit:10343 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9269 */
+  /* ./parser//parser.nit:10344 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9270 */
+  /* ./parser//parser.nit:10345 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9271 */
+  /* ./parser//parser.nit:10346 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9273 */
+  /* ./parser//parser.nit:10348 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10348);
   }
-  /* ./parser//parser.nit:9275 */
+  /* ./parser//parser.nit:10350 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10350);
   }
-  /* ./parser//parser.nit:9277 */
+  /* ./parser//parser.nit:10352 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast nullable TKwthen*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10352);
   }
-  /* ./parser//parser.nit:9279 */
+  /* ./parser//parser.nit:10354 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10354);
   }
-  /* ./parser//parser.nit:9281 */
+  /* ./parser//parser.nit:10356 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast nullable TKwelse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10356);
   }
-  /* ./parser//parser.nit:9283 */
+  /* ./parser//parser.nit:10358 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10358);
   }
-  /* ./parser//parser.nit:9284 */
+  /* ./parser//parser.nit:10359 */
   fra.me.REG[3] = NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9292 */
+  /* ./parser//parser.nit:10367 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9293 */
+  /* ./parser//parser.nit:10368 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10368);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26017,14 +28736,14 @@ void parser___ReduceAction302___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction304___action(val_t p0, val_t p1){
+void parser___ReduceAction337___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9298;
-  fra.me.meth = LOCATE_parser___ReduceAction304___action;
+  fra.me.line = 10373;
+  fra.me.meth = LOCATE_parser___ReduceAction337___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26034,37 +28753,37 @@ void parser___ReduceAction304___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9300 */
+  /* ./parser//parser.nit:10375 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9301 */
+  /* ./parser//parser.nit:10376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9302 */
+  /* ./parser//parser.nit:10377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9303 */
+  /* ./parser//parser.nit:10378 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9304 */
+  /* ./parser//parser.nit:10379 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9306 */
+  /* ./parser//parser.nit:10381 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10381);
   }
-  /* ./parser//parser.nit:9308 */
+  /* ./parser//parser.nit:10383 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10383);
   }
-  /* ./parser//parser.nit:9309 */
+  /* ./parser//parser.nit:10384 */
   fra.me.REG[3] = NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9313 */
+  /* ./parser//parser.nit:10388 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9314 */
+  /* ./parser//parser.nit:10389 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9314);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10389);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26072,14 +28791,14 @@ void parser___ReduceAction304___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction305___action(val_t p0, val_t p1){
+void parser___ReduceAction338___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 = 9319;
-  fra.me.meth = LOCATE_parser___ReduceAction305___action;
+  fra.me.line = 10394;
+  fra.me.meth = LOCATE_parser___ReduceAction338___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26089,37 +28808,37 @@ void parser___ReduceAction305___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9321 */
+  /* ./parser//parser.nit:10396 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9322 */
+  /* ./parser//parser.nit:10397 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9323 */
+  /* ./parser//parser.nit:10398 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9324 */
+  /* ./parser//parser.nit:10399 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9325 */
+  /* ./parser//parser.nit:10400 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9327 */
+  /* ./parser//parser.nit:10402 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9327);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10402);
   }
-  /* ./parser//parser.nit:9329 */
+  /* ./parser//parser.nit:10404 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9329);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10404);
   }
-  /* ./parser//parser.nit:9330 */
+  /* ./parser//parser.nit:10405 */
   fra.me.REG[3] = NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9334 */
+  /* ./parser//parser.nit:10409 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9335 */
+  /* ./parser//parser.nit:10410 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9335);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10410);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26127,14 +28846,14 @@ void parser___ReduceAction305___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction306___action(val_t p0, val_t p1){
+void parser___ReduceAction339___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 = 9340;
-  fra.me.meth = LOCATE_parser___ReduceAction306___action;
+  fra.me.line = 10415;
+  fra.me.meth = LOCATE_parser___ReduceAction339___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26144,39 +28863,39 @@ void parser___ReduceAction306___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9342 */
+  /* ./parser//parser.nit:10417 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9343 */
+  /* ./parser//parser.nit:10418 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9344 */
+  /* ./parser//parser.nit:10419 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9345 */
+  /* ./parser//parser.nit:10420 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9346 */
+  /* ./parser//parser.nit:10421 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9347 */
+  /* ./parser//parser.nit:10422 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9349 */
+  /* ./parser//parser.nit:10424 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9349);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10424);
   }
-  /* ./parser//parser.nit:9351 */
+  /* ./parser//parser.nit:10426 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10426);
   }
-  /* ./parser//parser.nit:9352 */
+  /* ./parser//parser.nit:10427 */
   fra.me.REG[3] = NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9356 */
+  /* ./parser//parser.nit:10431 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9357 */
+  /* ./parser//parser.nit:10432 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9357);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10432);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26184,14 +28903,14 @@ void parser___ReduceAction306___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction308___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[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 = 9362;
-  fra.me.meth = LOCATE_parser___ReduceAction308___action;
+  fra.me.line = 10437;
+  fra.me.meth = LOCATE_parser___ReduceAction341___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26201,35 +28920,35 @@ void parser___ReduceAction308___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9364 */
+  /* ./parser//parser.nit:10439 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9365 */
+  /* ./parser//parser.nit:10440 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9366 */
+  /* ./parser//parser.nit:10441 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9367 */
+  /* ./parser//parser.nit:10442 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9369 */
+  /* ./parser//parser.nit:10444 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9369);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10444);
   }
-  /* ./parser//parser.nit:9371 */
+  /* ./parser//parser.nit:10446 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10446);
   }
-  /* ./parser//parser.nit:9372 */
+  /* ./parser//parser.nit:10447 */
   fra.me.REG[3] = NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9376 */
+  /* ./parser//parser.nit:10451 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9377 */
+  /* ./parser//parser.nit:10452 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9377);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10452);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26237,14 +28956,14 @@ void parser___ReduceAction308___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction310___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[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 = 9382;
-  fra.me.meth = LOCATE_parser___ReduceAction310___action;
+  fra.me.line = 10457;
+  fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26254,37 +28973,37 @@ void parser___ReduceAction310___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9384 */
+  /* ./parser//parser.nit:10459 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9385 */
+  /* ./parser//parser.nit:10460 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9386 */
+  /* ./parser//parser.nit:10461 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9387 */
+  /* ./parser//parser.nit:10462 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9388 */
+  /* ./parser//parser.nit:10463 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9390 */
+  /* ./parser//parser.nit:10465 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9390);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10465);
   }
-  /* ./parser//parser.nit:9392 */
+  /* ./parser//parser.nit:10467 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10467);
   }
-  /* ./parser//parser.nit:9393 */
+  /* ./parser//parser.nit:10468 */
   fra.me.REG[3] = NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9397 */
+  /* ./parser//parser.nit:10472 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9398 */
+  /* ./parser//parser.nit:10473 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9398);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10473);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26292,14 +29011,14 @@ void parser___ReduceAction310___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction311___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[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 = 9403;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
+  fra.me.line = 10478;
+  fra.me.meth = LOCATE_parser___ReduceAction344___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26309,37 +29028,37 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9405 */
+  /* ./parser//parser.nit:10480 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9406 */
+  /* ./parser//parser.nit:10481 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9407 */
+  /* ./parser//parser.nit:10482 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9408 */
+  /* ./parser//parser.nit:10483 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9409 */
+  /* ./parser//parser.nit:10484 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9411 */
+  /* ./parser//parser.nit:10486 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10486);
   }
-  /* ./parser//parser.nit:9413 */
+  /* ./parser//parser.nit:10488 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10488);
   }
-  /* ./parser//parser.nit:9414 */
+  /* ./parser//parser.nit:10489 */
   fra.me.REG[3] = NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9418 */
+  /* ./parser//parser.nit:10493 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9419 */
+  /* ./parser//parser.nit:10494 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9419);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10494);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26347,14 +29066,14 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction312___action(val_t p0, val_t p1){
+void parser___ReduceAction345___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9424;
-  fra.me.meth = LOCATE_parser___ReduceAction312___action;
+  fra.me.line = 10499;
+  fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26364,37 +29083,37 @@ void parser___ReduceAction312___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9426 */
+  /* ./parser//parser.nit:10501 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9427 */
+  /* ./parser//parser.nit:10502 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9428 */
+  /* ./parser//parser.nit:10503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9429 */
+  /* ./parser//parser.nit:10504 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9430 */
+  /* ./parser//parser.nit:10505 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9432 */
+  /* ./parser//parser.nit:10507 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10507);
   }
-  /* ./parser//parser.nit:9434 */
+  /* ./parser//parser.nit:10509 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10509);
   }
-  /* ./parser//parser.nit:9435 */
+  /* ./parser//parser.nit:10510 */
   fra.me.REG[3] = NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9439 */
+  /* ./parser//parser.nit:10514 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9440 */
+  /* ./parser//parser.nit:10515 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9440);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10515);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26402,14 +29121,14 @@ void parser___ReduceAction312___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction313___action(val_t p0, val_t p1){
+void parser___ReduceAction346___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9445;
-  fra.me.meth = LOCATE_parser___ReduceAction313___action;
+  fra.me.line = 10520;
+  fra.me.meth = LOCATE_parser___ReduceAction346___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26419,37 +29138,37 @@ void parser___ReduceAction313___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9447 */
+  /* ./parser//parser.nit:10522 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9448 */
+  /* ./parser//parser.nit:10523 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9449 */
+  /* ./parser//parser.nit:10524 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9450 */
+  /* ./parser//parser.nit:10525 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9451 */
+  /* ./parser//parser.nit:10526 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9453 */
+  /* ./parser//parser.nit:10528 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10528);
   }
-  /* ./parser//parser.nit:9455 */
+  /* ./parser//parser.nit:10530 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10530);
   }
-  /* ./parser//parser.nit:9456 */
+  /* ./parser//parser.nit:10531 */
   fra.me.REG[3] = NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9460 */
+  /* ./parser//parser.nit:10535 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9461 */
+  /* ./parser//parser.nit:10536 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9461);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10536);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26457,14 +29176,14 @@ void parser___ReduceAction313___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction314___action(val_t p0, val_t p1){
+void parser___ReduceAction347___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9466;
-  fra.me.meth = LOCATE_parser___ReduceAction314___action;
+  fra.me.line = 10541;
+  fra.me.meth = LOCATE_parser___ReduceAction347___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26474,37 +29193,37 @@ void parser___ReduceAction314___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9468 */
+  /* ./parser//parser.nit:10543 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9469 */
+  /* ./parser//parser.nit:10544 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9470 */
+  /* ./parser//parser.nit:10545 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9471 */
+  /* ./parser//parser.nit:10546 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9472 */
+  /* ./parser//parser.nit:10547 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9474 */
+  /* ./parser//parser.nit:10549 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10549);
   }
-  /* ./parser//parser.nit:9476 */
+  /* ./parser//parser.nit:10551 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10551);
   }
-  /* ./parser//parser.nit:9477 */
+  /* ./parser//parser.nit:10552 */
   fra.me.REG[3] = NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9481 */
+  /* ./parser//parser.nit:10556 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9482 */
+  /* ./parser//parser.nit:10557 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9482);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10557);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26512,14 +29231,14 @@ void parser___ReduceAction314___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction315___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[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 = 9487;
-  fra.me.meth = LOCATE_parser___ReduceAction315___action;
+  fra.me.line = 10562;
+  fra.me.meth = LOCATE_parser___ReduceAction348___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26529,37 +29248,37 @@ void parser___ReduceAction315___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9489 */
+  /* ./parser//parser.nit:10564 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9490 */
+  /* ./parser//parser.nit:10565 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9491 */
+  /* ./parser//parser.nit:10566 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9492 */
+  /* ./parser//parser.nit:10567 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9493 */
+  /* ./parser//parser.nit:10568 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9495 */
+  /* ./parser//parser.nit:10570 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10570);
   }
-  /* ./parser//parser.nit:9497 */
+  /* ./parser//parser.nit:10572 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10572);
   }
-  /* ./parser//parser.nit:9498 */
+  /* ./parser//parser.nit:10573 */
   fra.me.REG[3] = NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9502 */
+  /* ./parser//parser.nit:10577 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9503 */
+  /* ./parser//parser.nit:10578 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9503);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10578);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26567,14 +29286,14 @@ void parser___ReduceAction315___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction316___action(val_t p0, val_t p1){
+void parser___ReduceAction349___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9508;
-  fra.me.meth = LOCATE_parser___ReduceAction316___action;
+  fra.me.line = 10583;
+  fra.me.meth = LOCATE_parser___ReduceAction349___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26584,37 +29303,37 @@ void parser___ReduceAction316___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9510 */
+  /* ./parser//parser.nit:10585 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9511 */
+  /* ./parser//parser.nit:10586 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9512 */
+  /* ./parser//parser.nit:10587 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9513 */
+  /* ./parser//parser.nit:10588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9514 */
+  /* ./parser//parser.nit:10589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9516 */
+  /* ./parser//parser.nit:10591 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10591);
   }
-  /* ./parser//parser.nit:9518 */
+  /* ./parser//parser.nit:10593 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10593);
   }
-  /* ./parser//parser.nit:9519 */
+  /* ./parser//parser.nit:10594 */
   fra.me.REG[3] = NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9523 */
+  /* ./parser//parser.nit:10598 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9524 */
+  /* ./parser//parser.nit:10599 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9524);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10599);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26622,14 +29341,14 @@ void parser___ReduceAction316___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction317___action(val_t p0, val_t p1){
+void parser___ReduceAction350___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 = 9529;
-  fra.me.meth = LOCATE_parser___ReduceAction317___action;
+  fra.me.line = 10604;
+  fra.me.meth = LOCATE_parser___ReduceAction350___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26639,37 +29358,37 @@ void parser___ReduceAction317___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9531 */
+  /* ./parser//parser.nit:10606 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9532 */
+  /* ./parser//parser.nit:10607 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9533 */
+  /* ./parser//parser.nit:10608 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9534 */
+  /* ./parser//parser.nit:10609 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9535 */
+  /* ./parser//parser.nit:10610 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9537 */
+  /* ./parser//parser.nit:10612 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9537);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10612);
   }
-  /* ./parser//parser.nit:9539 */
+  /* ./parser//parser.nit:10614 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10614);
   }
-  /* ./parser//parser.nit:9540 */
+  /* ./parser//parser.nit:10615 */
   fra.me.REG[3] = NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9544 */
+  /* ./parser//parser.nit:10619 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9545 */
+  /* ./parser//parser.nit:10620 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10620);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26677,14 +29396,14 @@ void parser___ReduceAction317___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction318___action(val_t p0, val_t p1){
+void parser___ReduceAction351___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9550;
-  fra.me.meth = LOCATE_parser___ReduceAction318___action;
+  fra.me.line = 10625;
+  fra.me.meth = LOCATE_parser___ReduceAction351___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26694,37 +29413,37 @@ void parser___ReduceAction318___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9552 */
+  /* ./parser//parser.nit:10627 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9553 */
+  /* ./parser//parser.nit:10628 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9554 */
+  /* ./parser//parser.nit:10629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9555 */
+  /* ./parser//parser.nit:10630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9556 */
+  /* ./parser//parser.nit:10631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9558 */
+  /* ./parser//parser.nit:10633 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10633);
   }
-  /* ./parser//parser.nit:9560 */
+  /* ./parser//parser.nit:10635 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10635);
   }
-  /* ./parser//parser.nit:9561 */
+  /* ./parser//parser.nit:10636 */
   fra.me.REG[3] = NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9565 */
+  /* ./parser//parser.nit:10640 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9566 */
+  /* ./parser//parser.nit:10641 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9566);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10641);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26732,14 +29451,14 @@ void parser___ReduceAction318___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction319___action(val_t p0, val_t p1){
+void parser___ReduceAction352___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9571;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
+  fra.me.line = 10646;
+  fra.me.meth = LOCATE_parser___ReduceAction352___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26749,37 +29468,37 @@ void parser___ReduceAction319___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9573 */
+  /* ./parser//parser.nit:10648 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9574 */
+  /* ./parser//parser.nit:10649 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9575 */
+  /* ./parser//parser.nit:10650 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9576 */
+  /* ./parser//parser.nit:10651 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9577 */
+  /* ./parser//parser.nit:10652 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9579 */
+  /* ./parser//parser.nit:10654 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10654);
   }
-  /* ./parser//parser.nit:9581 */
+  /* ./parser//parser.nit:10656 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10656);
   }
-  /* ./parser//parser.nit:9582 */
+  /* ./parser//parser.nit:10657 */
   fra.me.REG[3] = NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9586 */
+  /* ./parser//parser.nit:10661 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9587 */
+  /* ./parser//parser.nit:10662 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9587);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10662);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26787,14 +29506,14 @@ void parser___ReduceAction319___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction320___action(val_t p0, val_t p1){
+void parser___ReduceAction353___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9592;
-  fra.me.meth = LOCATE_parser___ReduceAction320___action;
+  fra.me.line = 10667;
+  fra.me.meth = LOCATE_parser___ReduceAction353___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26804,37 +29523,37 @@ void parser___ReduceAction320___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9594 */
+  /* ./parser//parser.nit:10669 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9595 */
+  /* ./parser//parser.nit:10670 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9596 */
+  /* ./parser//parser.nit:10671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9597 */
+  /* ./parser//parser.nit:10672 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9598 */
+  /* ./parser//parser.nit:10673 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9600 */
+  /* ./parser//parser.nit:10675 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10675);
   }
-  /* ./parser//parser.nit:9602 */
+  /* ./parser//parser.nit:10677 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10677);
   }
-  /* ./parser//parser.nit:9603 */
+  /* ./parser//parser.nit:10678 */
   fra.me.REG[3] = NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9607 */
+  /* ./parser//parser.nit:10682 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9608 */
+  /* ./parser//parser.nit:10683 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9608);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10683);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26842,14 +29561,14 @@ void parser___ReduceAction320___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction322___action(val_t p0, val_t p1){
+void parser___ReduceAction355___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9613;
-  fra.me.meth = LOCATE_parser___ReduceAction322___action;
+  fra.me.line = 10688;
+  fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26859,37 +29578,37 @@ void parser___ReduceAction322___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9615 */
+  /* ./parser//parser.nit:10690 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9616 */
+  /* ./parser//parser.nit:10691 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9617 */
+  /* ./parser//parser.nit:10692 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9618 */
+  /* ./parser//parser.nit:10693 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9619 */
+  /* ./parser//parser.nit:10694 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9621 */
+  /* ./parser//parser.nit:10696 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10696);
   }
-  /* ./parser//parser.nit:9623 */
+  /* ./parser//parser.nit:10698 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9623);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10698);
   }
-  /* ./parser//parser.nit:9624 */
+  /* ./parser//parser.nit:10699 */
   fra.me.REG[3] = NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9628 */
+  /* ./parser//parser.nit:10703 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9629 */
+  /* ./parser//parser.nit:10704 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9629);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10704);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26897,14 +29616,14 @@ void parser___ReduceAction322___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction323___action(val_t p0, val_t p1){
+void parser___ReduceAction356___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9634;
-  fra.me.meth = LOCATE_parser___ReduceAction323___action;
+  fra.me.line = 10709;
+  fra.me.meth = LOCATE_parser___ReduceAction356___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26914,37 +29633,37 @@ void parser___ReduceAction323___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9636 */
+  /* ./parser//parser.nit:10711 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9637 */
+  /* ./parser//parser.nit:10712 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9638 */
+  /* ./parser//parser.nit:10713 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9639 */
+  /* ./parser//parser.nit:10714 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9640 */
+  /* ./parser//parser.nit:10715 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9642 */
+  /* ./parser//parser.nit:10717 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10717);
   }
-  /* ./parser//parser.nit:9644 */
+  /* ./parser//parser.nit:10719 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9644);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10719);
   }
-  /* ./parser//parser.nit:9645 */
+  /* ./parser//parser.nit:10720 */
   fra.me.REG[3] = NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9649 */
+  /* ./parser//parser.nit:10724 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9650 */
+  /* ./parser//parser.nit:10725 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9650);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10725);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26952,14 +29671,14 @@ void parser___ReduceAction323___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction325___action(val_t p0, val_t p1){
+void parser___ReduceAction358___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9655;
-  fra.me.meth = LOCATE_parser___ReduceAction325___action;
+  fra.me.line = 10730;
+  fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -26969,37 +29688,37 @@ void parser___ReduceAction325___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9657 */
+  /* ./parser//parser.nit:10732 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9658 */
+  /* ./parser//parser.nit:10733 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9659 */
+  /* ./parser//parser.nit:10734 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9660 */
+  /* ./parser//parser.nit:10735 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9661 */
+  /* ./parser//parser.nit:10736 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9663 */
+  /* ./parser//parser.nit:10738 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10738);
   }
-  /* ./parser//parser.nit:9665 */
+  /* ./parser//parser.nit:10740 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10740);
   }
-  /* ./parser//parser.nit:9666 */
+  /* ./parser//parser.nit:10741 */
   fra.me.REG[3] = NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9670 */
+  /* ./parser//parser.nit:10745 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9671 */
+  /* ./parser//parser.nit:10746 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9671);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10746);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27007,14 +29726,14 @@ void parser___ReduceAction325___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction326___action(val_t p0, val_t p1){
+void parser___ReduceAction359___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9676;
-  fra.me.meth = LOCATE_parser___ReduceAction326___action;
+  fra.me.line = 10751;
+  fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27024,37 +29743,37 @@ void parser___ReduceAction326___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9678 */
+  /* ./parser//parser.nit:10753 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9679 */
+  /* ./parser//parser.nit:10754 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9680 */
+  /* ./parser//parser.nit:10755 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9681 */
+  /* ./parser//parser.nit:10756 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9682 */
+  /* ./parser//parser.nit:10757 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9684 */
+  /* ./parser//parser.nit:10759 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10759);
   }
-  /* ./parser//parser.nit:9686 */
+  /* ./parser//parser.nit:10761 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10761);
   }
-  /* ./parser//parser.nit:9687 */
+  /* ./parser//parser.nit:10762 */
   fra.me.REG[3] = NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9691 */
+  /* ./parser//parser.nit:10766 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9692 */
+  /* ./parser//parser.nit:10767 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9692);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10767);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27062,14 +29781,14 @@ void parser___ReduceAction326___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction327___action(val_t p0, val_t p1){
+void parser___ReduceAction360___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9697;
-  fra.me.meth = LOCATE_parser___ReduceAction327___action;
+  fra.me.line = 10772;
+  fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27079,37 +29798,37 @@ void parser___ReduceAction327___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9699 */
+  /* ./parser//parser.nit:10774 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9700 */
+  /* ./parser//parser.nit:10775 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9701 */
+  /* ./parser//parser.nit:10776 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9702 */
+  /* ./parser//parser.nit:10777 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9703 */
+  /* ./parser//parser.nit:10778 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9705 */
+  /* ./parser//parser.nit:10780 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10780);
   }
-  /* ./parser//parser.nit:9707 */
+  /* ./parser//parser.nit:10782 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10782);
   }
-  /* ./parser//parser.nit:9708 */
+  /* ./parser//parser.nit:10783 */
   fra.me.REG[3] = NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9712 */
+  /* ./parser//parser.nit:10787 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9713 */
+  /* ./parser//parser.nit:10788 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9713);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10788);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27117,14 +29836,14 @@ void parser___ReduceAction327___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction329___action(val_t p0, val_t p1){
+void parser___ReduceAction362___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 = 9718;
-  fra.me.meth = LOCATE_parser___ReduceAction329___action;
+  fra.me.line = 10793;
+  fra.me.meth = LOCATE_parser___ReduceAction362___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27134,35 +29853,35 @@ void parser___ReduceAction329___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9720 */
+  /* ./parser//parser.nit:10795 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9721 */
+  /* ./parser//parser.nit:10796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9722 */
+  /* ./parser//parser.nit:10797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9723 */
+  /* ./parser//parser.nit:10798 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9725 */
+  /* ./parser//parser.nit:10800 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9725);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10800);
   }
-  /* ./parser//parser.nit:9727 */
+  /* ./parser//parser.nit:10802 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10802);
   }
-  /* ./parser//parser.nit:9728 */
+  /* ./parser//parser.nit:10803 */
   fra.me.REG[3] = NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9732 */
+  /* ./parser//parser.nit:10807 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9733 */
+  /* ./parser//parser.nit:10808 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9733);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10808);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27170,14 +29889,14 @@ void parser___ReduceAction329___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction330___action(val_t p0, val_t p1){
+void parser___ReduceAction363___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9738;
-  fra.me.meth = LOCATE_parser___ReduceAction330___action;
+  fra.me.line = 10813;
+  fra.me.meth = LOCATE_parser___ReduceAction363___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27187,35 +29906,35 @@ void parser___ReduceAction330___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9740 */
+  /* ./parser//parser.nit:10815 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9741 */
+  /* ./parser//parser.nit:10816 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9742 */
+  /* ./parser//parser.nit:10817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9743 */
+  /* ./parser//parser.nit:10818 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9745 */
+  /* ./parser//parser.nit:10820 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast nullable TKwonce*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9745);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10820);
   }
-  /* ./parser//parser.nit:9747 */
+  /* ./parser//parser.nit:10822 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10822);
   }
-  /* ./parser//parser.nit:9748 */
+  /* ./parser//parser.nit:10823 */
   fra.me.REG[3] = NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9752 */
+  /* ./parser//parser.nit:10827 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9753 */
+  /* ./parser//parser.nit:10828 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9753);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10828);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27223,14 +29942,14 @@ void parser___ReduceAction330___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction332___action(val_t p0, val_t p1){
+void parser___ReduceAction365___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 = 9758;
-  fra.me.meth = LOCATE_parser___ReduceAction332___action;
+  fra.me.line = 10833;
+  fra.me.meth = LOCATE_parser___ReduceAction365___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -27242,48 +29961,48 @@ void parser___ReduceAction332___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9760 */
+  /* ./parser//parser.nit:10835 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9761 */
+  /* ./parser//parser.nit:10836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9762 */
+  /* ./parser//parser.nit:10837 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9763 */
+  /* ./parser//parser.nit:10838 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9764 */
+  /* ./parser//parser.nit:10839 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9765 */
+  /* ./parser//parser.nit:10840 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9767 */
+  /* ./parser//parser.nit:10842 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9767);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10842);
   }
-  /* ./parser//parser.nit:9769 */
+  /* ./parser//parser.nit:10844 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10844);
   }
-  /* ./parser//parser.nit:9771 */
+  /* ./parser//parser.nit:10846 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9771);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10846);
   }
-  /* ./parser//parser.nit:9772 */
+  /* ./parser//parser.nit:10847 */
   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:9773 */
+  /* ./parser//parser.nit:10848 */
   fra.me.REG[6] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:9779 */
+  /* ./parser//parser.nit:10854 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:9780 */
+  /* ./parser//parser.nit:10855 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9780);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10855);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27291,14 +30010,14 @@ void parser___ReduceAction332___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction333___action(val_t p0, val_t p1){
+void parser___ReduceAction366___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9785;
-  fra.me.meth = LOCATE_parser___ReduceAction333___action;
+  fra.me.line = 10860;
+  fra.me.meth = LOCATE_parser___ReduceAction366___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -27309,45 +30028,45 @@ void parser___ReduceAction333___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9787 */
+  /* ./parser//parser.nit:10862 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9788 */
+  /* ./parser//parser.nit:10863 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9789 */
+  /* ./parser//parser.nit:10864 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9790 */
+  /* ./parser//parser.nit:10865 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9791 */
+  /* ./parser//parser.nit:10866 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9792 */
+  /* ./parser//parser.nit:10867 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9794 */
+  /* ./parser//parser.nit:10869 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10869);
   }
-  /* ./parser//parser.nit:9796 */
+  /* ./parser//parser.nit:10871 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10871);
   }
-  /* ./parser//parser.nit:9798 */
+  /* ./parser//parser.nit:10873 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10873);
   }
-  /* ./parser//parser.nit:9799 */
+  /* ./parser//parser.nit:10874 */
   fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9804 */
+  /* ./parser//parser.nit:10879 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9805 */
+  /* ./parser//parser.nit:10880 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9805);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10880);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27355,14 +30074,14 @@ void parser___ReduceAction333___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction334___action(val_t p0, val_t p1){
+void parser___ReduceAction367___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9810;
-  fra.me.meth = LOCATE_parser___ReduceAction334___action;
+  fra.me.line = 10885;
+  fra.me.meth = LOCATE_parser___ReduceAction367___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -27373,35 +30092,35 @@ void parser___ReduceAction334___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9812 */
+  /* ./parser//parser.nit:10887 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9813 */
+  /* ./parser//parser.nit:10888 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9814 */
+  /* ./parser//parser.nit:10889 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9816 */
+  /* ./parser//parser.nit:10891 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9816);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10891);
   }
-  /* ./parser//parser.nit:9817 */
+  /* ./parser//parser.nit:10892 */
   fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9820 */
+  /* ./parser//parser.nit:10895 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9820);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10895);
   }
-  /* ./parser//parser.nit:9821 */
+  /* ./parser//parser.nit:10896 */
   fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:9826 */
+  /* ./parser//parser.nit:10901 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9827 */
+  /* ./parser//parser.nit:10902 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9827);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10902);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27409,14 +30128,14 @@ void parser___ReduceAction334___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction335___action(val_t p0, val_t p1){
+void parser___ReduceAction368___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9832;
-  fra.me.meth = LOCATE_parser___ReduceAction335___action;
+  fra.me.line = 10907;
+  fra.me.meth = LOCATE_parser___ReduceAction368___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27426,37 +30145,37 @@ void parser___ReduceAction335___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9834 */
+  /* ./parser//parser.nit:10909 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9835 */
+  /* ./parser//parser.nit:10910 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9836 */
+  /* ./parser//parser.nit:10911 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9837 */
+  /* ./parser//parser.nit:10912 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9838 */
+  /* ./parser//parser.nit:10913 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9840 */
+  /* ./parser//parser.nit:10915 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10915);
   }
-  /* ./parser//parser.nit:9842 */
+  /* ./parser//parser.nit:10917 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10917);
   }
-  /* ./parser//parser.nit:9843 */
+  /* ./parser//parser.nit:10918 */
   fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9847 */
+  /* ./parser//parser.nit:10922 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9848 */
+  /* ./parser//parser.nit:10923 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9848);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10923);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27464,14 +30183,14 @@ void parser___ReduceAction335___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction336___action(val_t p0, val_t p1){
+void parser___ReduceAction369___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 = 9853;
-  fra.me.meth = LOCATE_parser___ReduceAction336___action;
+  fra.me.line = 10928;
+  fra.me.meth = LOCATE_parser___ReduceAction369___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27481,27 +30200,27 @@ void parser___ReduceAction336___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9855 */
+  /* ./parser//parser.nit:10930 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9856 */
+  /* ./parser//parser.nit:10931 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9857 */
+  /* ./parser//parser.nit:10932 */
   fra.me.REG[4] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9860 */
+  /* ./parser//parser.nit:10935 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10935);
   }
-  /* ./parser//parser.nit:9861 */
+  /* ./parser//parser.nit:10936 */
   fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9865 */
+  /* ./parser//parser.nit:10940 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9866 */
+  /* ./parser//parser.nit:10941 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9866);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10941);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27509,14 +30228,14 @@ void parser___ReduceAction336___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction343___action(val_t p0, val_t p1){
+void parser___ReduceAction376___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 9871;
-  fra.me.meth = LOCATE_parser___ReduceAction343___action;
+  fra.me.line = 10946;
+  fra.me.meth = LOCATE_parser___ReduceAction376___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -27528,40 +30247,40 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9873 */
+  /* ./parser//parser.nit:10948 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9874 */
+  /* ./parser//parser.nit:10949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9875 */
+  /* ./parser//parser.nit:10950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9876 */
+  /* ./parser//parser.nit:10951 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9877 */
+  /* ./parser//parser.nit:10952 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9879 */
+  /* ./parser//parser.nit:10954 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9879);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10954);
   }
-  /* ./parser//parser.nit:9881 */
+  /* ./parser//parser.nit:10956 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9881);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10956);
   }
-  /* ./parser//parser.nit:9882 */
+  /* ./parser//parser.nit:10957 */
   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:9883 */
+  /* ./parser//parser.nit:10958 */
   fra.me.REG[6] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:9888 */
+  /* ./parser//parser.nit:10963 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:9889 */
+  /* ./parser//parser.nit:10964 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9889);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10964);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27569,14 +30288,14 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction344___action(val_t p0, val_t p1){
+void parser___ReduceAction377___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9894;
-  fra.me.meth = LOCATE_parser___ReduceAction344___action;
+  fra.me.line = 10969;
+  fra.me.meth = LOCATE_parser___ReduceAction377___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -27589,60 +30308,60 @@ void parser___ReduceAction344___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9896 */
+  /* ./parser//parser.nit:10971 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9897 */
+  /* ./parser//parser.nit:10972 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9898 */
+  /* ./parser//parser.nit:10973 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9899 */
+  /* ./parser//parser.nit:10974 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9900 */
+  /* ./parser//parser.nit:10975 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9901 */
+  /* ./parser//parser.nit:10976 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9902 */
+  /* ./parser//parser.nit:10977 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9903 */
+  /* ./parser//parser.nit:10978 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9904 */
+  /* ./parser//parser.nit:10979 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9906 */
+  /* ./parser//parser.nit:10981 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10981);
   }
-  /* ./parser//parser.nit:9908 */
+  /* ./parser//parser.nit:10983 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10983);
   }
-  /* ./parser//parser.nit:9910 */
+  /* ./parser//parser.nit:10985 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10985);
   }
-  /* ./parser//parser.nit:9912 */
+  /* ./parser//parser.nit:10987 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10987);
   }
-  /* ./parser//parser.nit:9913 */
+  /* ./parser//parser.nit:10988 */
   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:9914 */
+  /* ./parser//parser.nit:10989 */
   fra.me.REG[7] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:9920 */
+  /* ./parser//parser.nit:10995 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:9921 */
+  /* ./parser//parser.nit:10996 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9921);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10996);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27650,14 +30369,14 @@ void parser___ReduceAction344___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction345___action(val_t p0, val_t p1){
+void parser___ReduceAction378___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 = 9926;
-  fra.me.meth = LOCATE_parser___ReduceAction345___action;
+  fra.me.line = 11001;
+  fra.me.meth = LOCATE_parser___ReduceAction378___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -27668,47 +30387,47 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9928 */
+  /* ./parser//parser.nit:11003 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9929 */
+  /* ./parser//parser.nit:11004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9930 */
+  /* ./parser//parser.nit:11005 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9931 */
+  /* ./parser//parser.nit:11006 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9932 */
+  /* ./parser//parser.nit:11007 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9933 */
+  /* ./parser//parser.nit:11008 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9934 */
+  /* ./parser//parser.nit:11009 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9935 */
+  /* ./parser//parser.nit:11010 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9936 */
+  /* ./parser//parser.nit:11011 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9937 */
+  /* ./parser//parser.nit:11012 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9939 */
+  /* ./parser//parser.nit:11014 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9939);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11014);
   }
-  /* ./parser//parser.nit:9941 */
+  /* ./parser//parser.nit:11016 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9941);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11016);
   }
-  /* ./parser//parser.nit:9942 */
+  /* ./parser//parser.nit:11017 */
   fra.me.REG[3] = NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9946 */
+  /* ./parser//parser.nit:11021 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9947 */
+  /* ./parser//parser.nit:11022 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9947);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11022);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27716,14 +30435,14 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction346___action(val_t p0, val_t p1){
+void parser___ReduceAction379___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 = 9952;
-  fra.me.meth = LOCATE_parser___ReduceAction346___action;
+  fra.me.line = 11027;
+  fra.me.meth = LOCATE_parser___ReduceAction379___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -27734,47 +30453,47 @@ void parser___ReduceAction346___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9954 */
+  /* ./parser//parser.nit:11029 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9955 */
+  /* ./parser//parser.nit:11030 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9956 */
+  /* ./parser//parser.nit:11031 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9957 */
+  /* ./parser//parser.nit:11032 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9958 */
+  /* ./parser//parser.nit:11033 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9959 */
+  /* ./parser//parser.nit:11034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9960 */
+  /* ./parser//parser.nit:11035 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9961 */
+  /* ./parser//parser.nit:11036 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9962 */
+  /* ./parser//parser.nit:11037 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9963 */
+  /* ./parser//parser.nit:11038 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9965 */
+  /* ./parser//parser.nit:11040 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9965);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11040);
   }
-  /* ./parser//parser.nit:9967 */
+  /* ./parser//parser.nit:11042 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9967);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11042);
   }
-  /* ./parser//parser.nit:9968 */
+  /* ./parser//parser.nit:11043 */
   fra.me.REG[3] = NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9972 */
+  /* ./parser//parser.nit:11047 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9973 */
+  /* ./parser//parser.nit:11048 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9973);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11048);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27782,14 +30501,14 @@ void parser___ReduceAction346___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction347___action(val_t p0, val_t p1){
+void parser___ReduceAction380___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 = 9978;
-  fra.me.meth = LOCATE_parser___ReduceAction347___action;
+  fra.me.line = 11053;
+  fra.me.meth = LOCATE_parser___ReduceAction380___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -27799,30 +30518,30 @@ void parser___ReduceAction347___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9980 */
+  /* ./parser//parser.nit:11055 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9981 */
+  /* ./parser//parser.nit:11056 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9982 */
+  /* ./parser//parser.nit:11057 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:9984 */
+  /* ./parser//parser.nit:11059 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9984);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11059);
   }
-  /* ./parser//parser.nit:9985 */
+  /* ./parser//parser.nit:11060 */
   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:9986 */
+  /* ./parser//parser.nit:11061 */
   fra.me.REG[4] = NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:9989 */
+  /* ./parser//parser.nit:11064 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:9990 */
+  /* ./parser//parser.nit:11065 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9990);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11065);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27830,14 +30549,14 @@ void parser___ReduceAction347___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction348___action(val_t p0, val_t p1){
+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 = 9995;
-  fra.me.meth = LOCATE_parser___ReduceAction348___action;
+  fra.me.line = 11070;
+  fra.me.meth = LOCATE_parser___ReduceAction381___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -27846,25 +30565,25 @@ void parser___ReduceAction348___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9997 */
+  /* ./parser//parser.nit:11072 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9998 */
+  /* ./parser//parser.nit:11073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10000 */
+  /* ./parser//parser.nit:11075 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11075);
   }
-  /* ./parser//parser.nit:10001 */
+  /* ./parser//parser.nit:11076 */
   fra.me.REG[3] = NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10004 */
+  /* ./parser//parser.nit:11079 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10005 */
+  /* ./parser//parser.nit:11080 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10005);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11080);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27872,14 +30591,14 @@ void parser___ReduceAction348___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction349___action(val_t p0, val_t p1){
+void parser___ReduceAction382___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 = 10010;
-  fra.me.meth = LOCATE_parser___ReduceAction349___action;
+  fra.me.line = 11085;
+  fra.me.meth = LOCATE_parser___ReduceAction382___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -27888,25 +30607,25 @@ void parser___ReduceAction349___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10012 */
+  /* ./parser//parser.nit:11087 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10013 */
+  /* ./parser//parser.nit:11088 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10015 */
+  /* ./parser//parser.nit:11090 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11090);
   }
-  /* ./parser//parser.nit:10016 */
+  /* ./parser//parser.nit:11091 */
   fra.me.REG[3] = NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10019 */
+  /* ./parser//parser.nit:11094 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10020 */
+  /* ./parser//parser.nit:11095 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10020);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11095);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27914,14 +30633,14 @@ void parser___ReduceAction349___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction350___action(val_t p0, val_t p1){
+void parser___ReduceAction383___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 = 10025;
-  fra.me.meth = LOCATE_parser___ReduceAction350___action;
+  fra.me.line = 11100;
+  fra.me.meth = LOCATE_parser___ReduceAction383___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -27930,25 +30649,25 @@ void parser___ReduceAction350___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10027 */
+  /* ./parser//parser.nit:11102 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10028 */
+  /* ./parser//parser.nit:11103 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10030 */
+  /* ./parser//parser.nit:11105 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10030);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11105);
   }
-  /* ./parser//parser.nit:10031 */
+  /* ./parser//parser.nit:11106 */
   fra.me.REG[3] = NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10034 */
+  /* ./parser//parser.nit:11109 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10035 */
+  /* ./parser//parser.nit:11110 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10035);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11110);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27956,14 +30675,14 @@ void parser___ReduceAction350___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction351___action(val_t p0, val_t p1){
+void parser___ReduceAction384___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 = 10040;
-  fra.me.meth = LOCATE_parser___ReduceAction351___action;
+  fra.me.line = 11115;
+  fra.me.meth = LOCATE_parser___ReduceAction384___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -27972,25 +30691,25 @@ void parser___ReduceAction351___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10042 */
+  /* ./parser//parser.nit:11117 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10043 */
+  /* ./parser//parser.nit:11118 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10045 */
+  /* ./parser//parser.nit:11120 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10045);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11120);
   }
-  /* ./parser//parser.nit:10046 */
+  /* ./parser//parser.nit:11121 */
   fra.me.REG[3] = NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10049 */
+  /* ./parser//parser.nit:11124 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10050 */
+  /* ./parser//parser.nit:11125 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10050);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11125);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27998,14 +30717,14 @@ void parser___ReduceAction351___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction352___action(val_t p0, val_t p1){
+void parser___ReduceAction385___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 = 10055;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
+  fra.me.line = 11130;
+  fra.me.meth = LOCATE_parser___ReduceAction385___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28014,25 +30733,25 @@ void parser___ReduceAction352___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10057 */
+  /* ./parser//parser.nit:11132 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10058 */
+  /* ./parser//parser.nit:11133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10060 */
+  /* ./parser//parser.nit:11135 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11135);
   }
-  /* ./parser//parser.nit:10061 */
+  /* ./parser//parser.nit:11136 */
   fra.me.REG[3] = NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10064 */
+  /* ./parser//parser.nit:11139 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10065 */
+  /* ./parser//parser.nit:11140 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10065);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11140);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28040,14 +30759,14 @@ void parser___ReduceAction352___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction353___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[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 = 10070;
-  fra.me.meth = LOCATE_parser___ReduceAction353___action;
+  fra.me.line = 11145;
+  fra.me.meth = LOCATE_parser___ReduceAction386___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28056,25 +30775,25 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10072 */
+  /* ./parser//parser.nit:11147 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10073 */
+  /* ./parser//parser.nit:11148 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10075 */
+  /* ./parser//parser.nit:11150 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11150);
   }
-  /* ./parser//parser.nit:10076 */
+  /* ./parser//parser.nit:11151 */
   fra.me.REG[3] = NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10079 */
+  /* ./parser//parser.nit:11154 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10080 */
+  /* ./parser//parser.nit:11155 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10080);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11155);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28082,14 +30801,14 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction354___action(val_t p0, val_t p1){
+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 = 10085;
-  fra.me.meth = LOCATE_parser___ReduceAction354___action;
+  fra.me.line = 11160;
+  fra.me.meth = LOCATE_parser___ReduceAction387___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28098,25 +30817,25 @@ void parser___ReduceAction354___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10087 */
+  /* ./parser//parser.nit:11162 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10088 */
+  /* ./parser//parser.nit:11163 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10090 */
+  /* ./parser//parser.nit:11165 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast nullable TChar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10090);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11165);
   }
-  /* ./parser//parser.nit:10091 */
+  /* ./parser//parser.nit:11166 */
   fra.me.REG[3] = NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10094 */
+  /* ./parser//parser.nit:11169 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10095 */
+  /* ./parser//parser.nit:11170 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10095);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11170);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28124,14 +30843,14 @@ void parser___ReduceAction354___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction355___action(val_t p0, val_t p1){
+void parser___ReduceAction388___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10100;
-  fra.me.meth = LOCATE_parser___ReduceAction355___action;
+  fra.me.line = 11175;
+  fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28140,25 +30859,25 @@ void parser___ReduceAction355___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10102 */
+  /* ./parser//parser.nit:11177 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10103 */
+  /* ./parser//parser.nit:11178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10105 */
+  /* ./parser//parser.nit:11180 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11180);
   }
-  /* ./parser//parser.nit:10106 */
+  /* ./parser//parser.nit:11181 */
   fra.me.REG[3] = NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10109 */
+  /* ./parser//parser.nit:11184 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10110 */
+  /* ./parser//parser.nit:11185 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10110);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11185);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28166,14 +30885,14 @@ void parser___ReduceAction355___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction358___action(val_t p0, val_t p1){
+void parser___ReduceAction391___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10115;
-  fra.me.meth = LOCATE_parser___ReduceAction358___action;
+  fra.me.line = 11190;
+  fra.me.meth = LOCATE_parser___ReduceAction391___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -28184,55 +30903,55 @@ void parser___ReduceAction358___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10117 */
+  /* ./parser//parser.nit:11192 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10118 */
+  /* ./parser//parser.nit:11193 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10119 */
+  /* ./parser//parser.nit:11194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10120 */
+  /* ./parser//parser.nit:11195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10121 */
+  /* ./parser//parser.nit:11196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10122 */
+  /* ./parser//parser.nit:11197 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10123 */
+  /* ./parser//parser.nit:11198 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10124 */
+  /* ./parser//parser.nit:11199 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10125 */
+  /* ./parser//parser.nit:11200 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10126 */
+  /* ./parser//parser.nit:11201 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10127 */
+  /* ./parser//parser.nit:11202 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10129 */
+  /* ./parser//parser.nit:11204 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11204);
   }
-  /* ./parser//parser.nit:10131 */
+  /* ./parser//parser.nit:11206 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11206);
   }
-  /* ./parser//parser.nit:10133 */
+  /* ./parser//parser.nit:11208 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11208);
   }
-  /* ./parser//parser.nit:10134 */
+  /* ./parser//parser.nit:11209 */
   fra.me.REG[3] = NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10139 */
+  /* ./parser//parser.nit:11214 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10140 */
+  /* ./parser//parser.nit:11215 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10140);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11215);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28240,14 +30959,14 @@ void parser___ReduceAction358___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction359___action(val_t p0, val_t p1){
+void parser___ReduceAction392___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10145;
-  fra.me.meth = LOCATE_parser___ReduceAction359___action;
+  fra.me.line = 11220;
+  fra.me.meth = LOCATE_parser___ReduceAction392___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -28259,65 +30978,65 @@ void parser___ReduceAction359___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10147 */
+  /* ./parser//parser.nit:11222 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10148 */
+  /* ./parser//parser.nit:11223 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10149 */
+  /* ./parser//parser.nit:11224 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10150 */
+  /* ./parser//parser.nit:11225 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10151 */
+  /* ./parser//parser.nit:11226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10152 */
+  /* ./parser//parser.nit:11227 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10153 */
+  /* ./parser//parser.nit:11228 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10154 */
+  /* ./parser//parser.nit:11229 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10155 */
+  /* ./parser//parser.nit:11230 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10156 */
+  /* ./parser//parser.nit:11231 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10157 */
+  /* ./parser//parser.nit:11232 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10158 */
+  /* ./parser//parser.nit:11233 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10159 */
+  /* ./parser//parser.nit:11234 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10161 */
+  /* ./parser//parser.nit:11236 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11236);
   }
-  /* ./parser//parser.nit:10163 */
+  /* ./parser//parser.nit:11238 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10163);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11238);
   }
-  /* ./parser//parser.nit:10165 */
+  /* ./parser//parser.nit:11240 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11240);
   }
-  /* ./parser//parser.nit:10167 */
+  /* ./parser//parser.nit:11242 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11242);
   }
-  /* ./parser//parser.nit:10168 */
+  /* ./parser//parser.nit:11243 */
   fra.me.REG[3] = NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10174 */
+  /* ./parser//parser.nit:11249 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10175 */
+  /* ./parser//parser.nit:11250 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10175);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11250);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28325,15 +31044,15 @@ void parser___ReduceAction359___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction360___action(val_t p0, val_t p1){
+void parser___ReduceAction393___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10180;
-  fra.me.meth = LOCATE_parser___ReduceAction360___action;
+  fra.me.line = 11255;
+  fra.me.meth = LOCATE_parser___ReduceAction393___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -28344,30 +31063,30 @@ void parser___ReduceAction360___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10182 */
+  /* ./parser//parser.nit:11257 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10183 */
+  /* ./parser//parser.nit:11258 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10184 */
+  /* ./parser//parser.nit:11259 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10185 */
+  /* ./parser//parser.nit:11260 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10187 */
+  /* ./parser//parser.nit:11262 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10187);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11262);
   }
-  /* ./parser//parser.nit:10189 */
+  /* ./parser//parser.nit:11264 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10189);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11264);
   }
-  /* ./parser//parser.nit:10190 */
+  /* ./parser//parser.nit:11265 */
   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:10191 */
+  /* ./parser//parser.nit:11266 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28382,18 +31101,18 @@ void parser___ReduceAction360___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10192 */
+    /* ./parser//parser.nit:11267 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10194 */
+  /* ./parser//parser.nit:11269 */
   fra.me.REG[5] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:10197 */
+  /* ./parser//parser.nit:11272 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10198 */
+  /* ./parser//parser.nit:11273 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10198);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11273);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28401,15 +31120,15 @@ void parser___ReduceAction360___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction361___action(val_t p0, val_t p1){
+void parser___ReduceAction394___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10203;
-  fra.me.meth = LOCATE_parser___ReduceAction361___action;
+  fra.me.line = 11278;
+  fra.me.meth = LOCATE_parser___ReduceAction394___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -28421,41 +31140,41 @@ void parser___ReduceAction361___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10205 */
+  /* ./parser//parser.nit:11280 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10206 */
+  /* ./parser//parser.nit:11281 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10207 */
+  /* ./parser//parser.nit:11282 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10208 */
+  /* ./parser//parser.nit:11283 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10209 */
+  /* ./parser//parser.nit:11284 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10211 */
+  /* ./parser//parser.nit:11286 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10211);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11286);
   }
-  /* ./parser//parser.nit:10213 */
+  /* ./parser//parser.nit:11288 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11288);
   }
-  /* ./parser//parser.nit:10215 */
+  /* ./parser//parser.nit:11290 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11290);
   }
-  /* ./parser//parser.nit:10216 */
+  /* ./parser//parser.nit:11291 */
   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:10217 */
+  /* ./parser//parser.nit:11292 */
   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:10218 */
+  /* ./parser//parser.nit:11293 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28470,18 +31189,18 @@ void parser___ReduceAction361___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10219 */
+    /* ./parser//parser.nit:11294 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10221 */
+  /* ./parser//parser.nit:11296 */
   fra.me.REG[6] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
-  /* ./parser//parser.nit:10224 */
+  /* ./parser//parser.nit:11299 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10225 */
+  /* ./parser//parser.nit:11300 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10225);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11300);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28489,15 +31208,15 @@ void parser___ReduceAction361___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction362___action(val_t p0, val_t p1){
+void parser___ReduceAction395___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 = 10230;
-  fra.me.meth = LOCATE_parser___ReduceAction362___action;
+  fra.me.line = 11305;
+  fra.me.meth = LOCATE_parser___ReduceAction395___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -28508,19 +31227,19 @@ void parser___ReduceAction362___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10232 */
+  /* ./parser//parser.nit:11307 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10233 */
+  /* ./parser//parser.nit:11308 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10234 */
+  /* ./parser//parser.nit:11309 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10235 */
+  /* ./parser//parser.nit:11310 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10236 */
+  /* ./parser//parser.nit:11311 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10237 */
+  /* ./parser//parser.nit:11312 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10240 */
+  /* ./parser//parser.nit:11315 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28535,10 +31254,10 @@ void parser___ReduceAction362___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10241 */
+    /* ./parser//parser.nit:11316 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:10243 */
+  /* ./parser//parser.nit:11318 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28553,16 +31272,16 @@ void parser___ReduceAction362___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10244 */
+    /* ./parser//parser.nit:11319 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10246 */
+  /* ./parser//parser.nit:11321 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10247 */
+  /* ./parser//parser.nit:11322 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10247);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11322);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28570,14 +31289,14 @@ void parser___ReduceAction362___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction363___action(val_t p0, val_t p1){
+void parser___ReduceAction396___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10252;
-  fra.me.meth = LOCATE_parser___ReduceAction363___action;
+  fra.me.line = 11327;
+  fra.me.meth = LOCATE_parser___ReduceAction396___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28586,25 +31305,25 @@ void parser___ReduceAction363___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10254 */
+  /* ./parser//parser.nit:11329 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10255 */
+  /* ./parser//parser.nit:11330 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10257 */
+  /* ./parser//parser.nit:11332 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast nullable TStartString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10257);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11332);
   }
-  /* ./parser//parser.nit:10258 */
+  /* ./parser//parser.nit:11333 */
   fra.me.REG[3] = NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10261 */
+  /* ./parser//parser.nit:11336 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10262 */
+  /* ./parser//parser.nit:11337 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10262);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11337);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28612,14 +31331,14 @@ void parser___ReduceAction363___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction365___action(val_t p0, val_t p1){
+void parser___ReduceAction398___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 = 10267;
-  fra.me.meth = LOCATE_parser___ReduceAction365___action;
+  fra.me.line = 11342;
+  fra.me.meth = LOCATE_parser___ReduceAction398___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28628,25 +31347,25 @@ void parser___ReduceAction365___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10269 */
+  /* ./parser//parser.nit:11344 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10270 */
+  /* ./parser//parser.nit:11345 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10272 */
+  /* ./parser//parser.nit:11347 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast nullable TMidString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10272);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11347);
   }
-  /* ./parser//parser.nit:10273 */
+  /* ./parser//parser.nit:11348 */
   fra.me.REG[3] = NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10276 */
+  /* ./parser//parser.nit:11351 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10277 */
+  /* ./parser//parser.nit:11352 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10277);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11352);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28654,14 +31373,14 @@ void parser___ReduceAction365___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction366___action(val_t p0, val_t p1){
+void parser___ReduceAction399___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 = 10282;
-  fra.me.meth = LOCATE_parser___ReduceAction366___action;
+  fra.me.line = 11357;
+  fra.me.meth = LOCATE_parser___ReduceAction399___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28670,25 +31389,25 @@ void parser___ReduceAction366___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10284 */
+  /* ./parser//parser.nit:11359 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10285 */
+  /* ./parser//parser.nit:11360 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10287 */
+  /* ./parser//parser.nit:11362 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast nullable TEndString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11362);
   }
-  /* ./parser//parser.nit:10288 */
+  /* ./parser//parser.nit:11363 */
   fra.me.REG[3] = NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10291 */
+  /* ./parser//parser.nit:11366 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10292 */
+  /* ./parser//parser.nit:11367 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10292);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11367);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28696,15 +31415,15 @@ void parser___ReduceAction366___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction367___action(val_t p0, val_t p1){
+void parser___ReduceAction400___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 = 10297;
-  fra.me.meth = LOCATE_parser___ReduceAction367___action;
+  fra.me.line = 11372;
+  fra.me.meth = LOCATE_parser___ReduceAction400___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -28714,21 +31433,21 @@ void parser___ReduceAction367___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10299 */
+  /* ./parser//parser.nit:11374 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10300 */
+  /* ./parser//parser.nit:11375 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10301 */
+  /* ./parser//parser.nit:11376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10302 */
+  /* ./parser//parser.nit:11377 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10303 */
+  /* ./parser//parser.nit:11378 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10304 */
+  /* ./parser//parser.nit:11379 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10305 */
+  /* ./parser//parser.nit:11380 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10307 */
+  /* ./parser//parser.nit:11382 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28743,16 +31462,16 @@ void parser___ReduceAction367___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10308 */
+    /* ./parser//parser.nit:11383 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10310 */
+  /* ./parser//parser.nit:11385 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10311 */
+  /* ./parser//parser.nit:11386 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10311);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11386);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28760,15 +31479,15 @@ void parser___ReduceAction367___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction368___action(val_t p0, val_t p1){
+void parser___ReduceAction401___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10316;
-  fra.me.meth = LOCATE_parser___ReduceAction368___action;
+  fra.me.line = 11391;
+  fra.me.meth = LOCATE_parser___ReduceAction401___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -28779,29 +31498,29 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10318 */
+  /* ./parser//parser.nit:11393 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10319 */
+  /* ./parser//parser.nit:11394 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10320 */
+  /* ./parser//parser.nit:11395 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10321 */
+  /* ./parser//parser.nit:11396 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10322 */
+  /* ./parser//parser.nit:11397 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10323 */
+  /* ./parser//parser.nit:11398 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10324 */
+  /* ./parser//parser.nit:11399 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10325 */
+  /* ./parser//parser.nit:11400 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10328 */
+  /* ./parser//parser.nit:11403 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11403);
   }
-  /* ./parser//parser.nit:10329 */
+  /* ./parser//parser.nit:11404 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28816,19 +31535,19 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10330 */
+    /* ./parser//parser.nit:11405 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:10332 */
+  /* ./parser//parser.nit:11407 */
   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:10333 */
+  /* ./parser//parser.nit:11408 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10334 */
+  /* ./parser//parser.nit:11409 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10334);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11409);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28836,14 +31555,14 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction370___action(val_t p0, val_t p1){
+void parser___ReduceAction403___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10339;
-  fra.me.meth = LOCATE_parser___ReduceAction370___action;
+  fra.me.line = 11414;
+  fra.me.meth = LOCATE_parser___ReduceAction403___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -28852,17 +31571,17 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10341 */
+  /* ./parser//parser.nit:11416 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10342 */
+  /* ./parser//parser.nit:11417 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10343 */
+  /* ./parser//parser.nit:11418 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10344 */
+  /* ./parser//parser.nit:11419 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10344);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11419);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28870,15 +31589,15 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction373___action(val_t p0, val_t p1){
+void parser___ReduceAction406___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10349;
-  fra.me.meth = LOCATE_parser___ReduceAction373___action;
+  fra.me.line = 11424;
+  fra.me.meth = LOCATE_parser___ReduceAction406___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -28888,13 +31607,13 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10351 */
+  /* ./parser//parser.nit:11426 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10352 */
+  /* ./parser//parser.nit:11427 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10353 */
+  /* ./parser//parser.nit:11428 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10355 */
+  /* ./parser//parser.nit:11430 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28909,16 +31628,16 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10356 */
+    /* ./parser//parser.nit:11431 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10358 */
+  /* ./parser//parser.nit:11433 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10359 */
+  /* ./parser//parser.nit:11434 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10359);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11434);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28926,14 +31645,14 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction378___action(val_t p0, val_t p1){
+void parser___ReduceAction411___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 = 10364;
-  fra.me.meth = LOCATE_parser___ReduceAction378___action;
+  fra.me.line = 11439;
+  fra.me.meth = LOCATE_parser___ReduceAction411___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -28943,23 +31662,23 @@ void parser___ReduceAction378___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10366 */
+  /* ./parser//parser.nit:11441 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10367 */
+  /* ./parser//parser.nit:11442 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10368 */
+  /* ./parser//parser.nit:11443 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10369 */
+  /* ./parser//parser.nit:11444 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10370 */
+  /* ./parser//parser.nit:11445 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10372 */
+  /* ./parser//parser.nit:11447 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10373 */
+  /* ./parser//parser.nit:11448 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10373);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11448);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28967,15 +31686,15 @@ void parser___ReduceAction378___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction379___action(val_t p0, val_t p1){
+void parser___ReduceAction412___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10378;
-  fra.me.meth = LOCATE_parser___ReduceAction379___action;
+  fra.me.line = 11453;
+  fra.me.meth = LOCATE_parser___ReduceAction412___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -28985,13 +31704,13 @@ void parser___ReduceAction379___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10380 */
+  /* ./parser//parser.nit:11455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10381 */
+  /* ./parser//parser.nit:11456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10382 */
+  /* ./parser//parser.nit:11457 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10384 */
+  /* ./parser//parser.nit:11459 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29006,16 +31725,16 @@ void parser___ReduceAction379___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10385 */
+    /* ./parser//parser.nit:11460 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10387 */
+  /* ./parser//parser.nit:11462 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10388 */
+  /* ./parser//parser.nit:11463 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10388);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11463);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29023,15 +31742,15 @@ void parser___ReduceAction379___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction380___action(val_t p0, val_t p1){
+void parser___ReduceAction413___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 = 10393;
-  fra.me.meth = LOCATE_parser___ReduceAction380___action;
+  fra.me.line = 11468;
+  fra.me.meth = LOCATE_parser___ReduceAction413___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -29042,30 +31761,30 @@ void parser___ReduceAction380___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10395 */
+  /* ./parser//parser.nit:11470 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10396 */
+  /* ./parser//parser.nit:11471 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10397 */
+  /* ./parser//parser.nit:11472 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10398 */
+  /* ./parser//parser.nit:11473 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10399 */
+  /* ./parser//parser.nit:11474 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10400 */
+  /* ./parser//parser.nit:11475 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10401 */
+  /* ./parser//parser.nit:11476 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10403 */
+  /* ./parser//parser.nit:11478 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10403);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11478);
   }
-  /* ./parser//parser.nit:10405 */
+  /* ./parser//parser.nit:11480 */
   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:10406 */
+  /* ./parser//parser.nit:11481 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29080,16 +31799,16 @@ void parser___ReduceAction380___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10407 */
+    /* ./parser//parser.nit:11482 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10409 */
+  /* ./parser//parser.nit:11484 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10410 */
+  /* ./parser//parser.nit:11485 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10410);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11485);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29097,14 +31816,14 @@ void parser___ReduceAction380___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction381___action(val_t p0, val_t p1){
+void parser___ReduceAction414___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 = 10415;
-  fra.me.meth = LOCATE_parser___ReduceAction381___action;
+  fra.me.line = 11490;
+  fra.me.meth = LOCATE_parser___ReduceAction414___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29114,27 +31833,27 @@ void parser___ReduceAction381___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10417 */
+  /* ./parser//parser.nit:11492 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10418 */
+  /* ./parser//parser.nit:11493 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10419 */
+  /* ./parser//parser.nit:11494 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10421 */
+  /* ./parser//parser.nit:11496 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10421);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11496);
   }
-  /* ./parser//parser.nit:10422 */
+  /* ./parser//parser.nit:11497 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10427 */
+  /* ./parser//parser.nit:11502 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10428 */
+  /* ./parser//parser.nit:11503 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11503);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29142,14 +31861,14 @@ void parser___ReduceAction381___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction382___action(val_t p0, val_t p1){
+void parser___ReduceAction415___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 = 10433;
-  fra.me.meth = LOCATE_parser___ReduceAction382___action;
+  fra.me.line = 11508;
+  fra.me.meth = LOCATE_parser___ReduceAction415___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -29160,38 +31879,38 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10435 */
+  /* ./parser//parser.nit:11510 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10436 */
+  /* ./parser//parser.nit:11511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10437 */
+  /* ./parser//parser.nit:11512 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10438 */
+  /* ./parser//parser.nit:11513 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10440 */
+  /* ./parser//parser.nit:11515 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11515);
   }
-  /* ./parser//parser.nit:10441 */
+  /* ./parser//parser.nit:11516 */
   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:10443 */
+  /* ./parser//parser.nit:11518 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11518);
   }
-  /* ./parser//parser.nit:10444 */
+  /* ./parser//parser.nit:11519 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:10449 */
+  /* ./parser//parser.nit:11524 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10450 */
+  /* ./parser//parser.nit:11525 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10450);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11525);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29199,14 +31918,14 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction383___action(val_t p0, val_t p1){
+void parser___ReduceAction416___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10455;
-  fra.me.meth = LOCATE_parser___ReduceAction383___action;
+  fra.me.line = 11530;
+  fra.me.meth = LOCATE_parser___ReduceAction416___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -29217,37 +31936,37 @@ void parser___ReduceAction383___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10457 */
+  /* ./parser//parser.nit:11532 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10458 */
+  /* ./parser//parser.nit:11533 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10459 */
+  /* ./parser//parser.nit:11534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10460 */
+  /* ./parser//parser.nit:11535 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10461 */
+  /* ./parser//parser.nit:11536 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10463 */
+  /* ./parser//parser.nit:11538 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11538);
   }
-  /* ./parser//parser.nit:10465 */
+  /* ./parser//parser.nit:11540 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11540);
   }
-  /* ./parser//parser.nit:10466 */
+  /* ./parser//parser.nit:11541 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:10471 */
+  /* ./parser//parser.nit:11546 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10472 */
+  /* ./parser//parser.nit:11547 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10472);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11547);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29255,14 +31974,14 @@ void parser___ReduceAction383___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction384___action(val_t p0, val_t p1){
+void parser___ReduceAction417___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 = 10477;
-  fra.me.meth = LOCATE_parser___ReduceAction384___action;
+  fra.me.line = 11552;
+  fra.me.meth = LOCATE_parser___ReduceAction417___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -29274,48 +31993,48 @@ void parser___ReduceAction384___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10479 */
+  /* ./parser//parser.nit:11554 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10480 */
+  /* ./parser//parser.nit:11555 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10481 */
+  /* ./parser//parser.nit:11556 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10482 */
+  /* ./parser//parser.nit:11557 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10483 */
+  /* ./parser//parser.nit:11558 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10484 */
+  /* ./parser//parser.nit:11559 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10486 */
+  /* ./parser//parser.nit:11561 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11561);
   }
-  /* ./parser//parser.nit:10488 */
+  /* ./parser//parser.nit:11563 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11563);
   }
-  /* ./parser//parser.nit:10489 */
+  /* ./parser//parser.nit:11564 */
   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:10491 */
+  /* ./parser//parser.nit:11566 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11566);
   }
-  /* ./parser//parser.nit:10492 */
+  /* ./parser//parser.nit:11567 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
-  /* ./parser//parser.nit:10497 */
+  /* ./parser//parser.nit:11572 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10498 */
+  /* ./parser//parser.nit:11573 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10498);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11573);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29323,14 +32042,14 @@ void parser___ReduceAction384___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction385___action(val_t p0, val_t p1){
+void parser___ReduceAction418___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10503;
-  fra.me.meth = LOCATE_parser___ReduceAction385___action;
+  fra.me.line = 11578;
+  fra.me.meth = LOCATE_parser___ReduceAction418___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29340,27 +32059,27 @@ void parser___ReduceAction385___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10505 */
+  /* ./parser//parser.nit:11580 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10506 */
+  /* ./parser//parser.nit:11581 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10507 */
+  /* ./parser//parser.nit:11582 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10509 */
+  /* ./parser//parser.nit:11584 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10509);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11584);
   }
-  /* ./parser//parser.nit:10510 */
+  /* ./parser//parser.nit:11585 */
   fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10514 */
+  /* ./parser//parser.nit:11589 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10515 */
+  /* ./parser//parser.nit:11590 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10515);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11590);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29368,14 +32087,14 @@ void parser___ReduceAction385___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction386___action(val_t p0, val_t p1){
+void parser___ReduceAction419___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10520;
-  fra.me.meth = LOCATE_parser___ReduceAction386___action;
+  fra.me.line = 11595;
+  fra.me.meth = LOCATE_parser___ReduceAction419___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -29386,38 +32105,38 @@ void parser___ReduceAction386___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10522 */
+  /* ./parser//parser.nit:11597 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10523 */
+  /* ./parser//parser.nit:11598 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10524 */
+  /* ./parser//parser.nit:11599 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10525 */
+  /* ./parser//parser.nit:11600 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10527 */
+  /* ./parser//parser.nit:11602 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11602);
   }
-  /* ./parser//parser.nit:10528 */
+  /* ./parser//parser.nit:11603 */
   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:10530 */
+  /* ./parser//parser.nit:11605 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11605);
   }
-  /* ./parser//parser.nit:10531 */
+  /* ./parser//parser.nit:11606 */
   fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:10535 */
+  /* ./parser//parser.nit:11610 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10536 */
+  /* ./parser//parser.nit:11611 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10536);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11611);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29425,14 +32144,14 @@ void parser___ReduceAction386___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction387___action(val_t p0, val_t p1){
+void parser___ReduceAction420___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10541;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
+  fra.me.line = 11616;
+  fra.me.meth = LOCATE_parser___ReduceAction420___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29442,30 +32161,30 @@ void parser___ReduceAction387___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10543 */
+  /* ./parser//parser.nit:11618 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10544 */
+  /* ./parser//parser.nit:11619 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10545 */
+  /* ./parser//parser.nit:11620 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10547 */
+  /* ./parser//parser.nit:11622 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11622);
   }
-  /* ./parser//parser.nit:10548 */
+  /* ./parser//parser.nit:11623 */
   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:10549 */
+  /* ./parser//parser.nit:11624 */
   fra.me.REG[4] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:10553 */
+  /* ./parser//parser.nit:11628 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10554 */
+  /* ./parser//parser.nit:11629 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10554);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11629);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29473,14 +32192,14 @@ void parser___ReduceAction387___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction388___action(val_t p0, val_t p1){
+void parser___ReduceAction421___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10559;
-  fra.me.meth = LOCATE_parser___ReduceAction388___action;
+  fra.me.line = 11634;
+  fra.me.meth = LOCATE_parser___ReduceAction421___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29489,21 +32208,21 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10561 */
+  /* ./parser//parser.nit:11636 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10562 */
+  /* ./parser//parser.nit:11637 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10563 */
+  /* ./parser//parser.nit:11638 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10564 */
+  /* ./parser//parser.nit:11639 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10566 */
+  /* ./parser//parser.nit:11641 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10567 */
+  /* ./parser//parser.nit:11642 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10567);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11642);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29511,14 +32230,14 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction389___action(val_t p0, val_t p1){
+void parser___ReduceAction422___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10572;
-  fra.me.meth = LOCATE_parser___ReduceAction389___action;
+  fra.me.line = 11647;
+  fra.me.meth = LOCATE_parser___ReduceAction422___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29527,21 +32246,21 @@ void parser___ReduceAction389___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10574 */
+  /* ./parser//parser.nit:11649 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10575 */
+  /* ./parser//parser.nit:11650 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10576 */
+  /* ./parser//parser.nit:11651 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10577 */
+  /* ./parser//parser.nit:11652 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10579 */
+  /* ./parser//parser.nit:11654 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10580 */
+  /* ./parser//parser.nit:11655 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10580);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11655);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29549,14 +32268,14 @@ void parser___ReduceAction389___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction390___action(val_t p0, val_t p1){
+void parser___ReduceAction423___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 = 10585;
-  fra.me.meth = LOCATE_parser___ReduceAction390___action;
+  fra.me.line = 11660;
+  fra.me.meth = LOCATE_parser___ReduceAction423___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29565,15 +32284,15 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10587 */
+  /* ./parser//parser.nit:11662 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10588 */
+  /* ./parser//parser.nit:11663 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10589 */
+  /* ./parser//parser.nit:11664 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10589);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11664);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29581,14 +32300,14 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction392___action(val_t p0, val_t p1){
+void parser___ReduceAction425___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10594;
-  fra.me.meth = LOCATE_parser___ReduceAction392___action;
+  fra.me.line = 11669;
+  fra.me.meth = LOCATE_parser___ReduceAction425___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29598,30 +32317,30 @@ void parser___ReduceAction392___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10596 */
+  /* ./parser//parser.nit:11671 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10597 */
+  /* ./parser//parser.nit:11672 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10598 */
+  /* ./parser//parser.nit:11673 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10600 */
+  /* ./parser//parser.nit:11675 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11675);
   }
-  /* ./parser//parser.nit:10601 */
+  /* ./parser//parser.nit:11676 */
   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:10602 */
+  /* ./parser//parser.nit:11677 */
   fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:10605 */
+  /* ./parser//parser.nit:11680 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10606 */
+  /* ./parser//parser.nit:11681 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10606);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11681);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29629,14 +32348,14 @@ void parser___ReduceAction392___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction393___action(val_t p0, val_t p1){
+void parser___ReduceAction426___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 = 10611;
-  fra.me.meth = LOCATE_parser___ReduceAction393___action;
+  fra.me.line = 11686;
+  fra.me.meth = LOCATE_parser___ReduceAction426___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29646,32 +32365,32 @@ void parser___ReduceAction393___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10613 */
+  /* ./parser//parser.nit:11688 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10614 */
+  /* ./parser//parser.nit:11689 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10615 */
+  /* ./parser//parser.nit:11690 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10616 */
+  /* ./parser//parser.nit:11691 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10618 */
+  /* ./parser//parser.nit:11693 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10618);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11693);
   }
-  /* ./parser//parser.nit:10619 */
+  /* ./parser//parser.nit:11694 */
   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:10620 */
+  /* ./parser//parser.nit:11695 */
   fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:10623 */
+  /* ./parser//parser.nit:11698 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10624 */
+  /* ./parser//parser.nit:11699 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10624);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11699);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29679,14 +32398,14 @@ void parser___ReduceAction393___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction395___action(val_t p0, val_t p1){
+void parser___ReduceAction428___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10629;
-  fra.me.meth = LOCATE_parser___ReduceAction395___action;
+  fra.me.line = 11704;
+  fra.me.meth = LOCATE_parser___ReduceAction428___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -29694,15 +32413,15 @@ void parser___ReduceAction395___action(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10631 */
+  /* ./parser//parser.nit:11706 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10632 */
+  /* ./parser//parser.nit:11707 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10633 */
+  /* ./parser//parser.nit:11708 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10633);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11708);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29710,14 +32429,14 @@ void parser___ReduceAction395___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction396___action(val_t p0, val_t p1){
+void parser___ReduceAction429___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10638;
-  fra.me.meth = LOCATE_parser___ReduceAction396___action;
+  fra.me.line = 11713;
+  fra.me.meth = LOCATE_parser___ReduceAction429___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29726,17 +32445,17 @@ void parser___ReduceAction396___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10640 */
+  /* ./parser//parser.nit:11715 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10641 */
+  /* ./parser//parser.nit:11716 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10643 */
+  /* ./parser//parser.nit:11718 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10644 */
+  /* ./parser//parser.nit:11719 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10644);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11719);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29744,14 +32463,14 @@ void parser___ReduceAction396___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction397___action(val_t p0, val_t p1){
+void parser___ReduceAction430___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10649;
-  fra.me.meth = LOCATE_parser___ReduceAction397___action;
+  fra.me.line = 11724;
+  fra.me.meth = LOCATE_parser___ReduceAction430___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29760,17 +32479,17 @@ void parser___ReduceAction397___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10651 */
+  /* ./parser//parser.nit:11726 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10652 */
+  /* ./parser//parser.nit:11727 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10653 */
+  /* ./parser//parser.nit:11728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10654 */
+  /* ./parser//parser.nit:11729 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10654);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11729);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29778,14 +32497,14 @@ void parser___ReduceAction397___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction398___action(val_t p0, val_t p1){
+void parser___ReduceAction431___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 = 10659;
-  fra.me.meth = LOCATE_parser___ReduceAction398___action;
+  fra.me.line = 11734;
+  fra.me.meth = LOCATE_parser___ReduceAction431___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -29794,19 +32513,19 @@ void parser___ReduceAction398___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10661 */
+  /* ./parser//parser.nit:11736 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10662 */
+  /* ./parser//parser.nit:11737 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10663 */
+  /* ./parser//parser.nit:11738 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10664 */
+  /* ./parser//parser.nit:11739 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10665 */
+  /* ./parser//parser.nit:11740 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10665);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11740);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29814,14 +32533,14 @@ void parser___ReduceAction398___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction651___action(val_t p0, val_t p1){
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10670;
-  fra.me.meth = LOCATE_parser___ReduceAction651___action;
+  fra.me.line = 11745;
+  fra.me.meth = LOCATE_parser___ReduceAction688___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -29832,41 +32551,41 @@ void parser___ReduceAction651___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10672 */
+  /* ./parser//parser.nit:11747 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10673 */
+  /* ./parser//parser.nit:11748 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10674 */
+  /* ./parser//parser.nit:11749 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10675 */
+  /* ./parser//parser.nit:11750 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10677 */
+  /* ./parser//parser.nit:11752 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10677);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11752);
   }
-  /* ./parser//parser.nit:10679 */
+  /* ./parser//parser.nit:11754 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10679);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11754);
   }
-  /* ./parser//parser.nit:10681 */
+  /* ./parser//parser.nit:11756 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11756);
   }
-  /* ./parser//parser.nit:10682 */
+  /* ./parser//parser.nit:11757 */
   fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10687 */
+  /* ./parser//parser.nit:11762 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10688 */
+  /* ./parser//parser.nit:11763 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10688);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11763);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29874,14 +32593,14 @@ void parser___ReduceAction651___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction652___action(val_t p0, val_t p1){
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10693;
-  fra.me.meth = LOCATE_parser___ReduceAction652___action;
+  fra.me.line = 11768;
+  fra.me.meth = LOCATE_parser___ReduceAction689___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -29891,33 +32610,33 @@ void parser___ReduceAction652___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10695 */
+  /* ./parser//parser.nit:11770 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10696 */
+  /* ./parser//parser.nit:11771 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10697 */
+  /* ./parser//parser.nit:11772 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10699 */
+  /* ./parser//parser.nit:11774 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11774);
   }
-  /* ./parser//parser.nit:10701 */
+  /* ./parser//parser.nit:11776 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11776);
   }
-  /* ./parser//parser.nit:10702 */
+  /* ./parser//parser.nit:11777 */
   fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10706 */
+  /* ./parser//parser.nit:11781 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10707 */
+  /* ./parser//parser.nit:11782 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10707);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11782);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29925,14 +32644,14 @@ void parser___ReduceAction652___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction653___action(val_t p0, val_t p1){
+void parser___ReduceAction690___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   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___ReduceAction653___action;
+  fra.me.line = 11787;
+  fra.me.meth = LOCATE_parser___ReduceAction690___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -29945,48 +32664,48 @@ void parser___ReduceAction653___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10714 */
+  /* ./parser//parser.nit:11789 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10715 */
+  /* ./parser//parser.nit:11790 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10716 */
+  /* ./parser//parser.nit:11791 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10717 */
+  /* ./parser//parser.nit:11792 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10718 */
+  /* ./parser//parser.nit:11793 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10719 */
+  /* ./parser//parser.nit:11794 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10721 */
+  /* ./parser//parser.nit:11796 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11796);
   }
-  /* ./parser//parser.nit:10723 */
+  /* ./parser//parser.nit:11798 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10723);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11798);
   }
-  /* ./parser//parser.nit:10725 */
+  /* ./parser//parser.nit:11800 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10725);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11800);
   }
-  /* ./parser//parser.nit:10726 */
+  /* ./parser//parser.nit:11801 */
   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:10727 */
+  /* ./parser//parser.nit:11802 */
   fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:10733 */
+  /* ./parser//parser.nit:11808 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:10734 */
+  /* ./parser//parser.nit:11809 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10734);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11809);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29994,14 +32713,14 @@ void parser___ReduceAction653___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction656___action(val_t p0, val_t p1){
+void parser___ReduceAction693___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 = 10739;
-  fra.me.meth = LOCATE_parser___ReduceAction656___action;
+  fra.me.line = 11814;
+  fra.me.meth = LOCATE_parser___ReduceAction693___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -30013,46 +32732,46 @@ void parser___ReduceAction656___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10741 */
+  /* ./parser//parser.nit:11816 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10742 */
+  /* ./parser//parser.nit:11817 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10743 */
+  /* ./parser//parser.nit:11818 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10744 */
+  /* ./parser//parser.nit:11819 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10745 */
+  /* ./parser//parser.nit:11820 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10747 */
+  /* ./parser//parser.nit:11822 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11822);
   }
-  /* ./parser//parser.nit:10749 */
+  /* ./parser//parser.nit:11824 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11824);
   }
-  /* ./parser//parser.nit:10751 */
+  /* ./parser//parser.nit:11826 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11826);
   }
-  /* ./parser//parser.nit:10752 */
+  /* ./parser//parser.nit:11827 */
   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:10753 */
+  /* ./parser//parser.nit:11828 */
   fra.me.REG[6] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:10758 */
+  /* ./parser//parser.nit:11833 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10759 */
+  /* ./parser//parser.nit:11834 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10759);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11834);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30060,14 +32779,14 @@ void parser___ReduceAction656___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction669___action(val_t p0, val_t p1){
+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 = 10764;
-  fra.me.meth = LOCATE_parser___ReduceAction669___action;
+  fra.me.line = 11839;
+  fra.me.meth = LOCATE_parser___ReduceAction706___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -30076,21 +32795,21 @@ void parser___ReduceAction669___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10766 */
+  /* ./parser//parser.nit:11841 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10767 */
+  /* ./parser//parser.nit:11842 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10768 */
+  /* ./parser//parser.nit:11843 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10769 */
+  /* ./parser//parser.nit:11844 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10771 */
+  /* ./parser//parser.nit:11846 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10772 */
+  /* ./parser//parser.nit:11847 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11847);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30098,14 +32817,14 @@ void parser___ReduceAction669___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction670___action(val_t p0, val_t p1){
+void parser___ReduceAction707___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 = 10777;
-  fra.me.meth = LOCATE_parser___ReduceAction670___action;
+  fra.me.line = 11852;
+  fra.me.meth = LOCATE_parser___ReduceAction707___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -30114,17 +32833,17 @@ void parser___ReduceAction670___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10779 */
+  /* ./parser//parser.nit:11854 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10780 */
+  /* ./parser//parser.nit:11855 */
   fra.me.REG[3] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10782 */
+  /* ./parser//parser.nit:11857 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10783 */
+  /* ./parser//parser.nit:11858 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10783);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11858);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30132,15 +32851,15 @@ void parser___ReduceAction670___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction677___action(val_t p0, val_t p1){
+void parser___ReduceAction714___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 = 10788;
-  fra.me.meth = LOCATE_parser___ReduceAction677___action;
+  fra.me.line = 11863;
+  fra.me.meth = LOCATE_parser___ReduceAction714___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30150,13 +32869,13 @@ void parser___ReduceAction677___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10790 */
+  /* ./parser//parser.nit:11865 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10791 */
+  /* ./parser//parser.nit:11866 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10792 */
+  /* ./parser//parser.nit:11867 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10794 */
+  /* ./parser//parser.nit:11869 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30171,16 +32890,16 @@ void parser___ReduceAction677___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10795 */
+    /* ./parser//parser.nit:11870 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10797 */
+  /* ./parser//parser.nit:11872 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10798 */
+  /* ./parser//parser.nit:11873 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10798);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11873);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30188,15 +32907,15 @@ void parser___ReduceAction677___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction678___action(val_t p0, val_t p1){
+void parser___ReduceAction715___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 = 10803;
-  fra.me.meth = LOCATE_parser___ReduceAction678___action;
+  fra.me.line = 11878;
+  fra.me.meth = LOCATE_parser___ReduceAction715___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30207,24 +32926,24 @@ void parser___ReduceAction678___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10805 */
+  /* ./parser//parser.nit:11880 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10806 */
+  /* ./parser//parser.nit:11881 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10807 */
+  /* ./parser//parser.nit:11882 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10808 */
+  /* ./parser//parser.nit:11883 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10810 */
+  /* ./parser//parser.nit:11885 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11885);
   }
-  /* ./parser//parser.nit:10812 */
+  /* ./parser//parser.nit:11887 */
   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:10813 */
+  /* ./parser//parser.nit:11888 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30239,16 +32958,16 @@ void parser___ReduceAction678___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10814 */
+    /* ./parser//parser.nit:11889 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10816 */
+  /* ./parser//parser.nit:11891 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10817 */
+  /* ./parser//parser.nit:11892 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10817);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11892);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30256,15 +32975,15 @@ void parser___ReduceAction678___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction679___action(val_t p0, val_t p1){
+void parser___ReduceAction716___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10822;
-  fra.me.meth = LOCATE_parser___ReduceAction679___action;
+  fra.me.line = 11897;
+  fra.me.meth = LOCATE_parser___ReduceAction716___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30274,13 +32993,13 @@ void parser___ReduceAction679___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10824 */
+  /* ./parser//parser.nit:11899 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10825 */
+  /* ./parser//parser.nit:11900 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10826 */
+  /* ./parser//parser.nit:11901 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10828 */
+  /* ./parser//parser.nit:11903 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30295,16 +33014,16 @@ void parser___ReduceAction679___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10829 */
+    /* ./parser//parser.nit:11904 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10831 */
+  /* ./parser//parser.nit:11906 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10832 */
+  /* ./parser//parser.nit:11907 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10832);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11907);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30312,15 +33031,15 @@ void parser___ReduceAction679___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction680___action(val_t p0, val_t p1){
+void parser___ReduceAction717___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[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 = 10837;
-  fra.me.meth = LOCATE_parser___ReduceAction680___action;
+  fra.me.line = 11912;
+  fra.me.meth = LOCATE_parser___ReduceAction717___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30331,24 +33050,24 @@ void parser___ReduceAction680___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10839 */
+  /* ./parser//parser.nit:11914 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10840 */
+  /* ./parser//parser.nit:11915 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10841 */
+  /* ./parser//parser.nit:11916 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10842 */
+  /* ./parser//parser.nit:11917 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10844 */
+  /* ./parser//parser.nit:11919 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10844);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11919);
   }
-  /* ./parser//parser.nit:10846 */
+  /* ./parser//parser.nit:11921 */
   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:10847 */
+  /* ./parser//parser.nit:11922 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30363,16 +33082,16 @@ void parser___ReduceAction680___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10848 */
+    /* ./parser//parser.nit:11923 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10850 */
+  /* ./parser//parser.nit:11925 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10851 */
+  /* ./parser//parser.nit:11926 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10851);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11926);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30380,15 +33099,15 @@ void parser___ReduceAction680___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction681___action(val_t p0, val_t p1){
+void parser___ReduceAction718___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 = 10856;
-  fra.me.meth = LOCATE_parser___ReduceAction681___action;
+  fra.me.line = 11931;
+  fra.me.meth = LOCATE_parser___ReduceAction718___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30398,13 +33117,13 @@ void parser___ReduceAction681___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10858 */
+  /* ./parser//parser.nit:11933 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10859 */
+  /* ./parser//parser.nit:11934 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10860 */
+  /* ./parser//parser.nit:11935 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10862 */
+  /* ./parser//parser.nit:11937 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30419,16 +33138,16 @@ void parser___ReduceAction681___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10863 */
+    /* ./parser//parser.nit:11938 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10865 */
+  /* ./parser//parser.nit:11940 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10866 */
+  /* ./parser//parser.nit:11941 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10866);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11941);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30436,15 +33155,15 @@ void parser___ReduceAction681___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction682___action(val_t p0, val_t p1){
+void parser___ReduceAction719___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 = 10871;
-  fra.me.meth = LOCATE_parser___ReduceAction682___action;
+  fra.me.line = 11946;
+  fra.me.meth = LOCATE_parser___ReduceAction719___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30455,24 +33174,24 @@ void parser___ReduceAction682___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10873 */
+  /* ./parser//parser.nit:11948 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10874 */
+  /* ./parser//parser.nit:11949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10875 */
+  /* ./parser//parser.nit:11950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10876 */
+  /* ./parser//parser.nit:11951 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10878 */
+  /* ./parser//parser.nit:11953 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10878);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11953);
   }
-  /* ./parser//parser.nit:10880 */
+  /* ./parser//parser.nit:11955 */
   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:10881 */
+  /* ./parser//parser.nit:11956 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30487,16 +33206,16 @@ void parser___ReduceAction682___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10882 */
+    /* ./parser//parser.nit:11957 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10884 */
+  /* ./parser//parser.nit:11959 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10885 */
+  /* ./parser//parser.nit:11960 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10885);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11960);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30504,15 +33223,15 @@ void parser___ReduceAction682___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction683___action(val_t p0, val_t p1){
+void parser___ReduceAction720___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 = 10890;
-  fra.me.meth = LOCATE_parser___ReduceAction683___action;
+  fra.me.line = 11965;
+  fra.me.meth = LOCATE_parser___ReduceAction720___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30522,13 +33241,13 @@ void parser___ReduceAction683___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10892 */
+  /* ./parser//parser.nit:11967 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10893 */
+  /* ./parser//parser.nit:11968 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10894 */
+  /* ./parser//parser.nit:11969 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10896 */
+  /* ./parser//parser.nit:11971 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30543,16 +33262,16 @@ void parser___ReduceAction683___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10897 */
+    /* ./parser//parser.nit:11972 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10899 */
+  /* ./parser//parser.nit:11974 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10900 */
+  /* ./parser//parser.nit:11975 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11975);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30560,15 +33279,15 @@ void parser___ReduceAction683___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction684___action(val_t p0, val_t p1){
+void parser___ReduceAction721___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 = 10905;
-  fra.me.meth = LOCATE_parser___ReduceAction684___action;
+  fra.me.line = 11980;
+  fra.me.meth = LOCATE_parser___ReduceAction721___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30579,24 +33298,24 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10907 */
+  /* ./parser//parser.nit:11982 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10908 */
+  /* ./parser//parser.nit:11983 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10909 */
+  /* ./parser//parser.nit:11984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10910 */
+  /* ./parser//parser.nit:11985 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10912 */
+  /* ./parser//parser.nit:11987 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11987);
   }
-  /* ./parser//parser.nit:10914 */
+  /* ./parser//parser.nit:11989 */
   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:10915 */
+  /* ./parser//parser.nit:11990 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30611,16 +33330,16 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10916 */
+    /* ./parser//parser.nit:11991 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10918 */
+  /* ./parser//parser.nit:11993 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10919 */
+  /* ./parser//parser.nit:11994 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10919);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11994);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30628,15 +33347,15 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction687___action(val_t p0, val_t p1){
+void parser___ReduceAction724___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10924;
-  fra.me.meth = LOCATE_parser___ReduceAction687___action;
+  fra.me.line = 11999;
+  fra.me.meth = LOCATE_parser___ReduceAction724___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30646,13 +33365,13 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10926 */
+  /* ./parser//parser.nit:12001 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10927 */
+  /* ./parser//parser.nit:12002 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10928 */
+  /* ./parser//parser.nit:12003 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10930 */
+  /* ./parser//parser.nit:12005 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30667,16 +33386,16 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10931 */
+    /* ./parser//parser.nit:12006 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10933 */
+  /* ./parser//parser.nit:12008 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10934 */
+  /* ./parser//parser.nit:12009 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10934);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12009);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30684,15 +33403,15 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction688___action(val_t p0, val_t p1){
+void parser___ReduceAction725___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10939;
-  fra.me.meth = LOCATE_parser___ReduceAction688___action;
+  fra.me.line = 12014;
+  fra.me.meth = LOCATE_parser___ReduceAction725___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30703,24 +33422,24 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10941 */
+  /* ./parser//parser.nit:12016 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10942 */
+  /* ./parser//parser.nit:12017 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10943 */
+  /* ./parser//parser.nit:12018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10944 */
+  /* ./parser//parser.nit:12019 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10946 */
+  /* ./parser//parser.nit:12021 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12021);
   }
-  /* ./parser//parser.nit:10948 */
+  /* ./parser//parser.nit:12023 */
   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:10949 */
+  /* ./parser//parser.nit:12024 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30735,16 +33454,16 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10950 */
+    /* ./parser//parser.nit:12025 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10952 */
+  /* ./parser//parser.nit:12027 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10953 */
+  /* ./parser//parser.nit:12028 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10953);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12028);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30752,15 +33471,15 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction689___action(val_t p0, val_t p1){
+void parser___ReduceAction726___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10958;
-  fra.me.meth = LOCATE_parser___ReduceAction689___action;
+  fra.me.line = 12033;
+  fra.me.meth = LOCATE_parser___ReduceAction726___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30770,13 +33489,13 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10960 */
+  /* ./parser//parser.nit:12035 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10961 */
+  /* ./parser//parser.nit:12036 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10962 */
+  /* ./parser//parser.nit:12037 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10964 */
+  /* ./parser//parser.nit:12039 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30791,16 +33510,16 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10965 */
+    /* ./parser//parser.nit:12040 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10967 */
+  /* ./parser//parser.nit:12042 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10968 */
+  /* ./parser//parser.nit:12043 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10968);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12043);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30808,15 +33527,15 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction690___action(val_t p0, val_t p1){
+void parser___ReduceAction727___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10973;
-  fra.me.meth = LOCATE_parser___ReduceAction690___action;
+  fra.me.line = 12048;
+  fra.me.meth = LOCATE_parser___ReduceAction727___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30827,24 +33546,24 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10975 */
+  /* ./parser//parser.nit:12050 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10976 */
+  /* ./parser//parser.nit:12051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10977 */
+  /* ./parser//parser.nit:12052 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10978 */
+  /* ./parser//parser.nit:12053 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10980 */
+  /* ./parser//parser.nit:12055 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12055);
   }
-  /* ./parser//parser.nit:10982 */
+  /* ./parser//parser.nit:12057 */
   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:10983 */
+  /* ./parser//parser.nit:12058 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30859,16 +33578,16 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10984 */
+    /* ./parser//parser.nit:12059 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:10986 */
+  /* ./parser//parser.nit:12061 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:10987 */
+  /* ./parser//parser.nit:12062 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10987);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12062);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30876,15 +33595,15 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction691___action(val_t p0, val_t p1){
+void parser___ReduceAction728___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10992;
-  fra.me.meth = LOCATE_parser___ReduceAction691___action;
+  fra.me.line = 12067;
+  fra.me.meth = LOCATE_parser___ReduceAction728___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -30894,13 +33613,13 @@ void parser___ReduceAction691___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10994 */
+  /* ./parser//parser.nit:12069 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10995 */
+  /* ./parser//parser.nit:12070 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10996 */
+  /* ./parser//parser.nit:12071 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:10998 */
+  /* ./parser//parser.nit:12073 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30915,16 +33634,16 @@ void parser___ReduceAction691___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10999 */
+    /* ./parser//parser.nit:12074 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11001 */
+  /* ./parser//parser.nit:12076 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11002 */
+  /* ./parser//parser.nit:12077 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11002);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12077);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30932,15 +33651,15 @@ void parser___ReduceAction691___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction692___action(val_t p0, val_t p1){
+void parser___ReduceAction729___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11007;
-  fra.me.meth = LOCATE_parser___ReduceAction692___action;
+  fra.me.line = 12082;
+  fra.me.meth = LOCATE_parser___ReduceAction729___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -30951,24 +33670,24 @@ void parser___ReduceAction692___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11009 */
+  /* ./parser//parser.nit:12084 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11010 */
+  /* ./parser//parser.nit:12085 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11011 */
+  /* ./parser//parser.nit:12086 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11012 */
+  /* ./parser//parser.nit:12087 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11014 */
+  /* ./parser//parser.nit:12089 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12089);
   }
-  /* ./parser//parser.nit:11016 */
+  /* ./parser//parser.nit:12091 */
   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:11017 */
+  /* ./parser//parser.nit:12092 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30983,16 +33702,72 @@ void parser___ReduceAction692___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11018 */
+    /* ./parser//parser.nit:12093 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11020 */
+  /* ./parser//parser.nit:12095 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11021 */
+  /* ./parser//parser.nit:12096 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12096);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction730___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 12101;
+  fra.me.meth = LOCATE_parser___ReduceAction730___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:12103 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:12104 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12105 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:12107 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:12108 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:12110 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* ./parser//parser.nit:12111 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11021);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12111);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31000,15 +33775,15 @@ void parser___ReduceAction692___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction694___action(val_t p0, val_t p1){
+void parser___ReduceAction731___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11026;
-  fra.me.meth = LOCATE_parser___ReduceAction694___action;
+  fra.me.line = 12116;
+  fra.me.meth = LOCATE_parser___ReduceAction731___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31019,24 +33794,24 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11028 */
+  /* ./parser//parser.nit:12118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11029 */
+  /* ./parser//parser.nit:12119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11030 */
+  /* ./parser//parser.nit:12120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11031 */
+  /* ./parser//parser.nit:12121 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11033 */
+  /* ./parser//parser.nit:12123 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11033);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12123);
   }
-  /* ./parser//parser.nit:11035 */
+  /* ./parser//parser.nit:12125 */
   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:11036 */
+  /* ./parser//parser.nit:12126 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31051,16 +33826,16 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11037 */
+    /* ./parser//parser.nit:12127 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11039 */
+  /* ./parser//parser.nit:12129 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11040 */
+  /* ./parser//parser.nit:12130 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11040);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12130);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31068,15 +33843,15 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction696___action(val_t p0, val_t p1){
+void parser___ReduceAction733___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 = 11045;
-  fra.me.meth = LOCATE_parser___ReduceAction696___action;
+  fra.me.line = 12135;
+  fra.me.meth = LOCATE_parser___ReduceAction733___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31087,24 +33862,24 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11047 */
+  /* ./parser//parser.nit:12137 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11048 */
+  /* ./parser//parser.nit:12138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11049 */
+  /* ./parser//parser.nit:12139 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11050 */
+  /* ./parser//parser.nit:12140 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11052 */
+  /* ./parser//parser.nit:12142 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12142);
   }
-  /* ./parser//parser.nit:11054 */
+  /* ./parser//parser.nit:12144 */
   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:11055 */
+  /* ./parser//parser.nit:12145 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31119,16 +33894,84 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11056 */
+    /* ./parser//parser.nit:12146 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11058 */
+  /* ./parser//parser.nit:12148 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11059 */
+  /* ./parser//parser.nit:12149 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12149);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction735___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 12154;
+  fra.me.meth = LOCATE_parser___ReduceAction735___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser.nit:12156 */
+  fra.me.REG[2] = NIT_NULL;
+  /* ./parser//parser.nit:12157 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12158 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser.nit:12159 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* ./parser//parser.nit:12161 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12161);
+  }
+  /* ./parser//parser.nit:12163 */
+  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:12164 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser.nit:12165 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* ./parser//parser.nit:12167 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* ./parser//parser.nit:12168 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11059);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12168);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31136,14 +33979,14 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction697___action(val_t p0, val_t p1){
+void parser___ReduceAction736___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11064;
-  fra.me.meth = LOCATE_parser___ReduceAction697___action;
+  fra.me.line = 12173;
+  fra.me.meth = LOCATE_parser___ReduceAction736___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -31153,28 +33996,28 @@ void parser___ReduceAction697___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11066 */
+  /* ./parser//parser.nit:12175 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11067 */
+  /* ./parser//parser.nit:12176 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11068 */
+  /* ./parser//parser.nit:12177 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11070 */
+  /* ./parser//parser.nit:12179 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12179);
   }
-  /* ./parser//parser.nit:11071 */
+  /* ./parser//parser.nit:12180 */
   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:11072 */
+  /* ./parser//parser.nit:12181 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11073 */
+  /* ./parser//parser.nit:12182 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11073);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12182);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31182,14 +34025,14 @@ void parser___ReduceAction697___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction698___action(val_t p0, val_t p1){
+void parser___ReduceAction737___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11078;
-  fra.me.meth = LOCATE_parser___ReduceAction698___action;
+  fra.me.line = 12187;
+  fra.me.meth = LOCATE_parser___ReduceAction737___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31200,39 +34043,39 @@ void parser___ReduceAction698___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11080 */
+  /* ./parser//parser.nit:12189 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11081 */
+  /* ./parser//parser.nit:12190 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11082 */
+  /* ./parser//parser.nit:12191 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11083 */
+  /* ./parser//parser.nit:12192 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11085 */
+  /* ./parser//parser.nit:12194 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11085);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12194);
   }
-  /* ./parser//parser.nit:11087 */
+  /* ./parser//parser.nit:12196 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12196);
   }
-  /* ./parser//parser.nit:11088 */
+  /* ./parser//parser.nit:12197 */
   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:11089 */
+  /* ./parser//parser.nit:12198 */
   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:11090 */
+  /* ./parser//parser.nit:12199 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11091 */
+  /* ./parser//parser.nit:12200 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11091);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12200);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31240,15 +34083,15 @@ void parser___ReduceAction698___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction702___action(val_t p0, val_t p1){
+void parser___ReduceAction741___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11096;
-  fra.me.meth = LOCATE_parser___ReduceAction702___action;
+  fra.me.line = 12205;
+  fra.me.meth = LOCATE_parser___ReduceAction741___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31259,24 +34102,24 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11098 */
+  /* ./parser//parser.nit:12207 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11099 */
+  /* ./parser//parser.nit:12208 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11100 */
+  /* ./parser//parser.nit:12209 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11101 */
+  /* ./parser//parser.nit:12210 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11103 */
+  /* ./parser//parser.nit:12212 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12212);
   }
-  /* ./parser//parser.nit:11105 */
+  /* ./parser//parser.nit:12214 */
   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:11106 */
+  /* ./parser//parser.nit:12215 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31291,16 +34134,16 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11107 */
+    /* ./parser//parser.nit:12216 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11109 */
+  /* ./parser//parser.nit:12218 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11110 */
+  /* ./parser//parser.nit:12219 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11110);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12219);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31308,15 +34151,15 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction703___action(val_t p0, val_t p1){
+void parser___ReduceAction742___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 = 11115;
-  fra.me.meth = LOCATE_parser___ReduceAction703___action;
+  fra.me.line = 12224;
+  fra.me.meth = LOCATE_parser___ReduceAction742___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -31326,13 +34169,13 @@ void parser___ReduceAction703___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11117 */
+  /* ./parser//parser.nit:12226 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11118 */
+  /* ./parser//parser.nit:12227 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11119 */
+  /* ./parser//parser.nit:12228 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11121 */
+  /* ./parser//parser.nit:12230 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31347,16 +34190,16 @@ void parser___ReduceAction703___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11122 */
+    /* ./parser//parser.nit:12231 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11124 */
+  /* ./parser//parser.nit:12233 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11125 */
+  /* ./parser//parser.nit:12234 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11125);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12234);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31364,15 +34207,15 @@ void parser___ReduceAction703___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction704___action(val_t p0, val_t p1){
+void parser___ReduceAction743___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11130;
-  fra.me.meth = LOCATE_parser___ReduceAction704___action;
+  fra.me.line = 12239;
+  fra.me.meth = LOCATE_parser___ReduceAction743___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31383,24 +34226,24 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11132 */
+  /* ./parser//parser.nit:12241 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11133 */
+  /* ./parser//parser.nit:12242 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11134 */
+  /* ./parser//parser.nit:12243 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11135 */
+  /* ./parser//parser.nit:12244 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11137 */
+  /* ./parser//parser.nit:12246 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11137);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12246);
   }
-  /* ./parser//parser.nit:11139 */
+  /* ./parser//parser.nit:12248 */
   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:11140 */
+  /* ./parser//parser.nit:12249 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31415,16 +34258,16 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11141 */
+    /* ./parser//parser.nit:12250 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11143 */
+  /* ./parser//parser.nit:12252 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11144 */
+  /* ./parser//parser.nit:12253 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11144);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12253);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31432,15 +34275,15 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction705___action(val_t p0, val_t p1){
+void parser___ReduceAction744___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11149;
-  fra.me.meth = LOCATE_parser___ReduceAction705___action;
+  fra.me.line = 12258;
+  fra.me.meth = LOCATE_parser___ReduceAction744___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -31450,13 +34293,13 @@ void parser___ReduceAction705___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11151 */
+  /* ./parser//parser.nit:12260 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11152 */
+  /* ./parser//parser.nit:12261 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11153 */
+  /* ./parser//parser.nit:12262 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11155 */
+  /* ./parser//parser.nit:12264 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31471,16 +34314,16 @@ void parser___ReduceAction705___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11156 */
+    /* ./parser//parser.nit:12265 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11158 */
+  /* ./parser//parser.nit:12267 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11159 */
+  /* ./parser//parser.nit:12268 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11159);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12268);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31488,15 +34331,15 @@ void parser___ReduceAction705___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction706___action(val_t p0, val_t p1){
+void parser___ReduceAction745___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11164;
-  fra.me.meth = LOCATE_parser___ReduceAction706___action;
+  fra.me.line = 12273;
+  fra.me.meth = LOCATE_parser___ReduceAction745___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -31507,24 +34350,24 @@ void parser___ReduceAction706___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11166 */
+  /* ./parser//parser.nit:12275 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11167 */
+  /* ./parser//parser.nit:12276 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11168 */
+  /* ./parser//parser.nit:12277 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11169 */
+  /* ./parser//parser.nit:12278 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* ./parser//parser.nit:11171 */
+  /* ./parser//parser.nit:12280 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12280);
   }
-  /* ./parser//parser.nit:11173 */
+  /* ./parser//parser.nit:12282 */
   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:11174 */
+  /* ./parser//parser.nit:12283 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31539,16 +34382,16 @@ void parser___ReduceAction706___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11175 */
+    /* ./parser//parser.nit:12284 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11177 */
+  /* ./parser//parser.nit:12286 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11178 */
+  /* ./parser//parser.nit:12287 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11178);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12287);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);